2017-01-23 3 views
2

В моем файле маршрутов, web.php я,Добавить статический маршрут к маршруту, который должен быть динамическим?

Route::get('/m/{game}', '[email protected]')->name('game'); 
Route::get('/m/{game?}', '[email protected]')->name('all'); 

Но я могу добавить «статические» маршруты, например:

Route::get('/m/snes', '[email protected]')->name('snes') 

ответ

3

организовать свой маршрут, чтобы сделать статический сверху, так Laravel маршрутизации найти статический первый, а не идти к /m/{game} и /m/{game?}

2

Поместите этот маршрут:

Route::get('/m/snes', '[email protected]')->name('snes'); 

Перед другими маршрутами, чтобы заставить его работать.

0

Вы должны поставить статический маршрут перед другими маршрутами. Случается, что когда Laravel проверяет, какой маршрут использовать, когда вы идете в m/snes, он проверяет маршруты, пока не достигнет совпадения. Так что если у вас есть:

Route::get('/m/{game}', '[email protected]')->name('game'); 
Route::get('/m/{game?}', '[email protected]')->name('all'); 
Route::get('/m/snes', '[email protected]')->name('snes') 

Laravel замечает, что первый маршрут действителен, так как м/SNES означает, что «SNES» может быть {игра} переменная.

Если поставить статический маршрут на вершине, однако:

Route::get('/m/snes', '[email protected]')->name('snes') 
Route::get('/m/{game}', '[email protected]')->name('game'); 
Route::get('/m/{game?}', '[email protected]')->name('all'); 

как только он достигает его он замечает, что это совпадение. И если ваш предполагаемый URL-адрес был чем-то вроде m/n64, он продолжает поиск, пока не найдет совпадение (в этом случае это будет следующий маршрут в списке). Это распространенное сообщение о маршрутизации файлов, даже в проектах JS.

Смежные вопросы