Gdy aplikacja robi się coraz większa dla czytelności można chcieć podzielić plik routes/web.php na kilka mniejszych.
Aby to zrealizować moją pierwszą myślą było po prostu include wydzielonych plików z trasami:
// routes/web.php require_once 'web/redirects.php'; require_once 'web/website.php'; require_once 'web/admin.php';
Mimo iż to jest złe podejście to po tej zmianie aplikacja działała całkowicie poprawnie.
Problemy zaczęły się gdy wykonałem testy PHPUnit
public function test_home() { $response = $this->get('/'); $response->assertStatus(200); } public function test_posts() { $response = $this->get('/posts'); $response->assertStatus(200); }
Pierwszy test zawsze przechodził jednak następne (bez względu czy w tym samym czy innym pliku) zwracały błąd:
Route [home] not defined.
Okazuje się, że mechanika testująca Laravela wczytuje jedynie plik routes/web.php
Aby poprawnie rozbić routes na kilka plików zamiast includów w samym pliku trzeba dostarczyć ścieżki w Provoderze.
Poprawne rozbicie routes na wiele plików
// App\Providers\RouteServiceProvider.php; Route::middleware('web') ->namespace($this->namespace) ->group( [ base_path('routes/web.php'), base_path('routes/web/redirects.php'), base_path('routes/web/website.php'), base_path('routes/web/admin.php'), ] );