我使用Laravel资源控制器构建模型API一直运行良好,直到我在调用get create时尝试覆盖默认的Laravel资源路由,但Laravel根本不接受覆盖。文档说明如下:
如果有必要在资源控制器之外添加除默认资源路由之外的其他路由,则应在调用Route :: resource之前定义这些路由;否则,资源方法定义的路由可能会无意中优先于您的补充路由:
在我的代码中,我有以下内容:
routes.php文件
Route::group(['prefix' => 'api/v1', 'middleware' => 'cors'], function () {
Route::get('test/create', 'V1\Universal\TestController@create2');
Route::resource('test', 'V1\Universal\TestController');
});
TestController.php
public function create2()
{
return "create 2 override function";
}
public function create()
{
return "create default function";
}
调用API / api / v1 / test / create时,它总是触发create()方法而不是create2()方法。根据Laravel文档,我的自定义附加路由应优先于资源之前定义的。
任何想法?
答案 0 :(得分:1)
如果要覆盖资源路由,则需要尝试在Route::resource
之后添加它们。文档中的引用说明了如何将路由添加到资源路由,而不是如何覆盖它们:
如果有必要向资源添加其他路径 超出默认资源路由的控制器,您应该定义那些 在你调用Route :: resource之前的路由;否则,路线 由资源方法定义的可能无意中优先 在你的补充路线上
您也可以使用except
参数:
Route::group(['prefix' => 'api/v1', 'middleware' => 'cors'], function () {
Route::get('test/create', 'V1\Universal\TestController@create2');
Route::resource('test', 'V1\Universal\TestController', ['except' => ['create']]););
});
在这种情况下,Route::resource
不会创建create
路由。