宣告路线优先于另一个

时间:2018-06-21 14:37:58

标签: laravel laravel-5.6

在声明带有参数的路由时,Laravel会以某种方式无视紧随其后声明的任何其他路由(具有名称命名约定的任何路由)。

这是我的routes.php文件

Route::group(['middleware' => ['auth','member'], 'prefix' => 'profile'], function () {
     Route::get('/details/{profile_id}','Member\ProfileController@index');
     Route::get('/details/image','Member\ProfileImageController@index');
     Route::get('/details/details','Member\ProfileDetailsController@index');
});

当尝试拉动profile image时,我会不断得到Requested resource could not be found,但是如果我在/details/image之前声明/details/{profile_id},那么它将起作用。

Laravel是否将{profile_id}image匹配?我在Laravel文档中找不到任何可以说明这种情况的信息。

我做错什么了吗?

2 个答案:

答案 0 :(得分:0)

您必须以这种方式安排路线。因为/details/image将被视为/details/*

 Route::group(['middleware' => ['auth','member'], 'prefix' => 'profile'], function () {

     Route::get('/details/image','Member\ProfileImageController@index');
     Route::get('/details/details','Member\ProfileDetailsController@index');
     Route::get('/details/{profile_id}','Member\ProfileController@index');

 });

或者您也可以使用过滤器获取确切值

Route::get('/details/{profile_id}','Member\ProfileController@index')->where('profile_id', '[0-9]+');

答案 1 :(得分:0)

您需要使用该路由public function endix的{​​{1}}除外

  

在您的控制器上放这个

Route::get('/details/image','Member\ProfileImageController@index');

否则您可以更改它,因为索引是唯一的函数。