【问题标题】:Laravel 5.2 Resource routing override default actionsLaravel 5.2 资源路由覆盖默认操作
【发布时间】:2016-09-21 22:06:21
【问题描述】:

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

有什么想法吗?

【问题讨论】:

    标签: php laravel laravel-5 laravel-5.2


    【解决方案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 路由。

    【讨论】:

      猜你喜欢
      • 2017-01-17
      • 2018-04-07
      • 2021-05-24
      • 2016-09-13
      • 2017-02-15
      • 2017-08-30
      • 2016-09-30
      • 2019-09-04
      • 1970-01-01
      相关资源
      最近更新 更多