Laravel 5.5资源控制器行为不端

时间:2017-12-27 08:54:16

标签: php laravel routes laravel-5.5

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

现在,我有两条路线。

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

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

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

OD也表示在订单的情况下,应该在那些之前声明任何路线而不是资源。我也试过了。我仍然需要显示方法而不是 showUserCertificate 方法。我在这里错过了什么?

2 个答案:

答案 0 :(得分:4)

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

user/blah
user/anything
user/certificate

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

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

答案 1 :(得分:0)

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

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

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

//您可以将其更改为 Route :: get('user / certificate / {id}','UserController @ showUserCertificate');