Laravel 5.5 资源控制器行为不当
Laravel 5.5 resource controller misbehaving
我使用 --resource 命令创建了我的 UserController。
现在,我有两条路线。
Route::get('user/{id}', 'UserController@show');
Route::get('user/certificate', 'UserController@showUserCertificate');
由于我没有使用 Route::resource 方法,官方文档说调用第二个路由不应触发第一个路由。但这并没有发生在我的情况下。
OD 还说在顺序的情况下,任何路由而不是资源都应该在那些之前声明。我也试过了。它仍然需要我使用 show 方法而不是 showUserCertificate 方法。我在这里错过了什么?
当然,它总是按 show
路线。它是与您请求的 URI 匹配的第一条路由...您在该路由中定义了一个路由参数,因此它匹配任何以 user
开头并具有 1 个附加段的内容。
user/blah
user/anything
user/certificate
所有这些匹配 user/{id}
。第一个匹配的路由是使用的路由。颠倒这两条路线的顺序,使更具体的路线排在第一位。
更新:
您需要升级框架。在与路由排序相关的确切版本中引入了一个错误。 5.5.8 修复了它。 Reference to GitHub PR to revert change
是的,在这种情况下,每次调用第二条路由时都会调用第一条路由。
第二条路由中的证书将被视为第一个控制器中的 {id}。如果我的答案正确,请投票
Route::get('user/{id}', 'UserController@show');
Route::get('user/certificate', 'UserController@showUserCertificate');
//你可以改成
Route::get('user/certificate/{id}', 'UserController@showUserCertificate');
我使用 --resource 命令创建了我的 UserController。
现在,我有两条路线。
Route::get('user/{id}', 'UserController@show');
Route::get('user/certificate', 'UserController@showUserCertificate');
由于我没有使用 Route::resource 方法,官方文档说调用第二个路由不应触发第一个路由。但这并没有发生在我的情况下。
OD 还说在顺序的情况下,任何路由而不是资源都应该在那些之前声明。我也试过了。它仍然需要我使用 show 方法而不是 showUserCertificate 方法。我在这里错过了什么?
当然,它总是按 show
路线。它是与您请求的 URI 匹配的第一条路由...您在该路由中定义了一个路由参数,因此它匹配任何以 user
开头并具有 1 个附加段的内容。
user/blah
user/anything
user/certificate
所有这些匹配 user/{id}
。第一个匹配的路由是使用的路由。颠倒这两条路线的顺序,使更具体的路线排在第一位。
更新: 您需要升级框架。在与路由排序相关的确切版本中引入了一个错误。 5.5.8 修复了它。 Reference to GitHub PR to revert change
是的,在这种情况下,每次调用第二条路由时都会调用第一条路由。 第二条路由中的证书将被视为第一个控制器中的 {id}。如果我的答案正确,请投票
Route::get('user/{id}', 'UserController@show');
Route::get('user/certificate', 'UserController@showUserCertificate');
//你可以改成 Route::get('user/certificate/{id}', 'UserController@showUserCertificate');