首页 文章

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

提问于
浏览
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 回答

  • 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 路由 .

相关问题