2015-05-07 8 views
6

Drogi główne aplikacji:Jak nie przeciążać głównych tras trasami pakietów?

Route::get('/login', [ 
    'as' => 'user.login', 
    'uses' => '[email protected]' 
]; 
Route::get('/logout', [ 
    'as' => 'user.logout', 
    'uses' => '[email protected]' 
]; 
Route::get('/admin', [ 
    'as' => 'admin.index', 
    'uses' => '[email protected]' 
]; 

Mam pakiet (sprzedawca) (Przykład: metrakit/mypackage) z routes.php pliku. W tym pliku mam trasę:

Route::get('/{slug}', [ 
    'as' => 'item.show', 
    'uses' => '[email protected]' 
]; 

Ta trasa przeciąża wszystkie moje główne trasy! Moje trasy takie jak "/ login", "/ logout", "/ bob", ... są przekierowywane do mojego kontrolera ItemController.

nie chcę mieć trasę jak

Route::get('/item/{slug}', array('as' => 'item.show', 'uses' => '[email protected]'); 

I myśli, muszę zrobić wzór trasy tak:

Route::pattern('slug', '^((?!(login|logout|admin)).)*$'); 

Ale wygląda trochę brudny i nie jest dynamiczny.

Więc szukam lepszego rozwiązania.

+0

Problem stanowi kolejność ładowania tras. Prawdopodobnie używasz ładowania twoich własnych tras w metodzie 'boot()'. Spowoduje to załadowanie twoich tras przesyłek przed normalnymi trasami. Umieszczenie trasy catchall na górze zrobi to, co właśnie widzisz. Domyślam się, że najlepszym wyjściem byłoby nieautomatyczne ładowanie tras z pakietu w metodzie bootowania, ale ręczne ładowanie ich w poprzednim filtrze (po załadowaniu zwykłych tras). – Robert

Odpowiedz

0

Wygląda na to, że zrobiłeś właściwą drogę. Problem, który może się zdarzyć podczas dodawania nowej trasy do pliku route.php, również musisz dodać do wzoru trasy. Jednak można to rozwiązać, tworząc zmienną globalną, aby ustawić ją tylko raz.

+0

Wybrałem wykorzystanie wzoru trasy – Metra

0

Może to być tak proste, jak załadowanie dostawcy usług dostawcy w późniejszym terminie w pliku app.php. Trasy są przetwarzane w kolejności, w której są zarejestrowane.