# Organisation des routes web

> Découpage fait le 2026-10-06. Avant ça, toutes les routes web vivaient dans un
> unique `routes/web.php` de ~2440 lignes / 151 groupes de routes.

## Pourquoi

Avec un seul gros fichier, deux personnes qui ajoutent des routes sur des modules
différents éditent souvent les mêmes zones du fichier ; un conflit Git mal résolu
fait perdre des routes sans qu'on s'en rende compte. Avec **un fichier par groupe
de routes**, deux personnes sur deux modules différents ne touchent jamais le
même fichier : plus de conflit possible sur ces routes.

## Structure

```
routes/
├── web.php        → ne contient plus de routes (juste un commentaire pointeur)
└── web/           → 147 fichiers à plat, un par groupe de routes
    ├── client.php        (Route::prefix('/client') ...)
    ├── commande.php
    ├── formule.php
    └── ...
```

- Le nom du fichier = le préfixe de la route (`/formule_copie` → `formule_copie.php`).
- Chaque fichier contient son propre `use` (uniquement les contrôleurs utilisés).
- `dashboard.php` regroupe la route racine `/`, le groupe `/dashboard` et la route
  `/dashboard` protégée par Jetstream (3 blocs sans lien de préfixe unique).
- Les 3 groupes `Route::group(['prefix' => 'facturation/outils/...'])` sont dans
  `decalage_facturation.php`, `lignes_non_facturables.php`, `facturer_bl.php`.
- `energie` était déclaré deux fois dans l'ancien fichier ; le doublon (identique) a été supprimé.

## Chargement automatique

`App\Providers\RouteServiceProvider` charge tous les `routes/web/*.php` avec le
middleware `web` :

```php
foreach (glob(base_path('routes/web/*.php')) as $routeFile) {
    Route::middleware('web')->group($routeFile);
}
```

**Ajouter une entité = créer un fichier**, sans toucher `RouteServiceProvider`,
`web.php` ni un autre fichier (donc pas de conflit Git sur un fichier partagé).

## Ajouter un groupe de routes

Créer `routes/web/mon_entite.php` :

```php
<?php

use Illuminate\Support\Facades\Route;
use App\Http\Controllers\mon_entite_controller;

Route::prefix('/mon_entite')->name('mon_entite.')->group(function () {
    Route::middleware(['auth:sanctum','interne'])->get('/', [mon_entite_controller::class,'index'])->name('index');
    Route::get('/creer',[mon_entite_controller::class,'afficher_formulaire'])->name('nouveau');
    Route::post('/enregistrer',[mon_entite_controller::class,'enregistrer']);
    Route::get('/{mon_entite}/modifier',[mon_entite_controller::class,'afficher_formulaire'])->name('modifier');
    Route::get('/table',[mon_entite_controller::class,'data_table']);
    Route::delete('/{mon_entite}/supprimer',[mon_entite_controller::class,'supprimer']);
});
```

## Vérifications faites

Découpage fait par script (tokenizer PHP), pas à la main :

- Table de routes complète comparée avant/après (URI, méthode, nom, action,
  middlewares déclarés) : **1035 routes, diff vide**.
- Appels `Route::get/post/put/patch/delete/any` : 949 / 949 ; `->name(` : 742 / 742.
- `php -l` propre sur les 147 fichiers.
- Imports morts supprimés (jamais utilisés dans l'ancien fichier) :
  `App\Models\client`, `App\Models\formule`, `http\Env\Request`, `http\Url`.

## Anomalies préexistantes

Corrigées le 2026-10-06 :

- `/devis_laravel` était déclaré deux fois : l'ancien bloc (moins complet) a été
  supprimé, il ne reste que le second (celui qui était déjà effectif), qui contient
  en plus `transformer_commande_valider`, `ajouter_lignes_taxes` et
  `modifier_qte_dans_lignes_taxes`.
- `/energie` était déclaré deux fois à l'identique : doublon supprimé.
- `/parametre_laravel` partageait `->name('parametre.')` avec `/parametre` : renommé
  en `->name('parametre_laravel.')`. Cette route n'est référencée nulle part dans
  `app/`, `resources/` ni `public/` : elle peut sans doute être supprimée.

Restent à traiter (comportement conservé à l'identique) :

1. Routes de test vers des contrôleurs inexistants : `test_tcp_ip.php`,
   `test_commune.php`, `test_iframe.php` (ce dernier sans `use` non plus).
   `php artisan route:list` plante tant que ces contrôleurs n'existent pas.

## Revenir en arrière

Le découpage touche uniquement `routes/web.php`, `routes/web/*` et
`app/Providers/RouteServiceProvider.php` : un `git revert` du commit suffit.
