路由按宣告的順序進行匹配

這是 Laravel 路線的常見問題。路由按宣告的順序進行匹配。第一個匹配的路由是使用的路由。

此示例將按預期工作:

Route::get('/posts/{postId}/comments/{commentId}', 'CommentController@show');
Route::get('/posts/{postId}', 'PostController@show');

/posts/1/comments/1 的獲取請求將呼叫 CommentController@show。對/posts/1 的獲取請求將呼叫 PostController@show

但是,此示例不會以相同的方式工作:

Route::get('/posts/{postId}', 'PostController@show');
Route::get('/posts/{postId}/comments/{commentId}', 'CommentController@show');

/posts/1/comments/1 的獲取請求將呼叫 PostController@show。對/posts/1 的獲取請求將呼叫 PostController@show

因為 Laravel 使用第一個匹配的路由,所以/posts/1/comments/1 的請求匹配 Route::get('/posts/{postId}', 'PostController@show'); 並將變數 $postId 賦值給 1/comments/1。這意味著永遠不會呼叫 CommentController@show