添加静态路由到应该是动态的路由?

时间:2017-01-23 15:52:30

标签: php laravel laravel-5 laravel-5.3

在我的路线文件中,web.php我有,

Route::get('/m/{game}', 'CommentController@index')->name('game');
Route::get('/m/{game?}', 'GameController@all')->name('all');

但我可以添加“静态”路线,例如:

Route::get('/m/snes', 'GameController@snes')->name('snes')

4 个答案:

答案 0 :(得分:3)

安排您的路由以使静态位于顶部,因此laravel路由将首先找到静态而不是转到/m/{game}/m/{game?}

答案 1 :(得分:2)

这条路线:

Route::get('/m/snes', 'GameController@snes')->name('snes');

在使其运作的其他路线之前。

答案 2 :(得分:1)

您必须将静态路由置于动态路由之上。

if

答案 3 :(得分:0)

您必须将静态路由放在其他路由之前。当Laravel在你去m / snes时检查使用哪条路线时会发生什么,它会检查路线直到达到匹配为止。所以如果你有:

Route::get('/m/{game}', 'CommentController@index')->name('game');
Route::get('/m/{game?}', 'GameController@all')->name('all');
Route::get('/m/snes', 'GameController@snes')->name('snes')

Laravel注意到第一条路线是有效的,因为m / snes意味着" snes"可以是{game}变量。

如果你把静态路线放在最上面,那么:

Route::get('/m/snes', 'GameController@snes')->name('snes')
Route::get('/m/{game}', 'CommentController@index')->name('game');
Route::get('/m/{game?}', 'GameController@all')->name('all');

一旦到达它就会注意到它是匹配的。如果您的预期URL类似于m / n64,它会一直搜索,直到找到匹配项(在这种情况下,它将是列表中的下一个路径)。这是路由文件的常见现象,即使是在JS项目中也是如此。