我正在构建一个使用Laravel资源控制器的模拟API,直到我尝试在调用get创建时重写默认的Laravel资源路由,但Laravel只是不接受覆盖。这些文件规定如下:
如果有必要在默认资源路由之外向资源控制器添加其他路由,则应在调用路由::resource之前定义这些路由;否则,由资源方法定义的路由可能无意中优先于您的补充路由::resource::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文档,我的自定义附加路由应该优先,因为它是在资源之前定义的。
有什么想法吗?
发布于 2016-05-24 15:31:11
如果要对资源路由进行过度记录,则要尝试在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
路由。
https://stackoverflow.com/questions/37417877
复制相似问题