我使用 - resource 命令创建了我的UserController。
现在,我有两条路线。
Route::get('user/{id}', 'UserController@show');
Route::get('user/certificate', 'UserController@showUserCertificate');
由于我没有使用 Route :: resource 方法,官方文档说调用第二条路线不应该触发第一条路线。但在我的情况下,这并没有发生。
OD也表示在订单的情况下,应该在那些之前声明任何路线而不是资源。我也试过了。我仍然需要显示方法而不是 showUserCertificate 方法。我在这里错过了什么?
答案 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');