Laravel 5.5资源控制器行为不端

问题描述 投票:1回答:2

我使用--resource命令创建了UserController。

现在,我有两条路线。

Route::get('user/{id}', 'UserController@show');

Route::get('user/certificate', 'UserController@showUserCertificate');

由于我没有使用Route :: resource方法,官方文档称调用第二条路径不应该触发第一条路径。但在我的情况下,这并没有发生。

OD也说明了订单,任何路线而不是资源都应该在那之前申报。我也试过了。它仍然需要我显示方法而不是showUserCertificate方法。我在这里错过了什么?

php laravel routes laravel-5.5
2个回答
4
投票

当然,它总是击中show路线。它是匹配您请求的URI的第一个路由...您在该路由中定义了一个路由参数,因此它匹配以user开头并且有一个额外段的任何内容。

user/blah
user/anything
user/certificate

所有这些都匹配user/{id}。匹配的第一条路线是使用的路线。颠倒这两条路线的顺序,以便更具体的路线首先。

更新:您需要升级框架。在与路由排序相关的确切版本中引入了一个错误。 5.5.8修复它。 Reference to GitHub PR to revert change


0
投票

是的在这种情况下,每次调用第二条路线时都会调用第一条路线。第二个路由中的证书将被视为第一个控制器中的{id}。如果它是正确的,请投票给我答案

Route::get('user/{id}', 'UserController@show');

Route::get('user/certificate', 'UserController@showUserCertificate');

//你可以把它改成Route :: get('user / certificate / {id}','UserController @ showUserCertificate');

© www.soinside.com 2019 - 2024. All rights reserved.