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'),
]
);