Laravel 5.2资源路由覆盖默认操作

时间:2016-05-24 15:27:24

标签: php laravel laravel-5 laravel-5.2

我使用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文档,我的自定义附加路由应优先于资源之前定义的。

任何想法?

1 个答案:

答案 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路由。

相关问题