【问题标题】:Limit what methods are allowed for a route限制路由允许的方法
【发布时间】:2016-07-24 22:00:48
【问题描述】:

我正在尝试删除我的一个控制器上的 PUT 方法,但如果不将每个方法映射到函数,我就找不到这样做的方法。

我的路由文件中有以下内容:

Route::group(['prefix' => 'api'], function() {
    $defaultOptions = ['except' => ['create', 'edit']];

    Route::resource('recipies', 'RecipieController', $defaultOptions);
    //This is the one that I am trying to restrict
    Route::resource('recipies.ingredients', 'Recipie\IngredientController', ['except' => ['create', 'edit', 'show']]); 

    Route::resource('ingredients', 'IngredientController', $defaultOptions);
});

我知道我可以执行以下操作来完成我想要的,但我希望有一些选项可以限制允许的方法

Route::get('recipies/{recipie_id}/ingredients', 'Recipie\IngredientController');
Route::patch('recipies/{recipie_id}/ingredients/{ingredient_id}', 'Recipie\IngredientController');
Route::delete('recipies/{recipie_id}/ingredients/{ingredient_id}', 'Recipie\IngredientController');

虽然上述方法可行,但我觉得它很混乱,希望有一个更清洁的解决方案。

【问题讨论】:

    标签: php laravel laravel-5 laravel-5.2 laravel-routing


    【解决方案1】:

    PUT 方法映射到资源控制器的 update 方法。将此方法添加到排除方法列表中:

    Route::resource('recipies.ingredients', 'Recipie\IngredientController', ['except' => ['create', 'edit', 'show', 'update]]); 
    

    【讨论】:

    • 问题在于它还删除了我想保留的PATCH 请求方法。我希望 api 能够更新 (PATCH) 资源,而不是替换 (PUT) 整个资源。
    • 不幸的是,Laravel 的资源控制器将这两种方法视为相同。如果您的实现写入/替换资源或只是“修补”它,这取决于您。如果您想禁止 PUT,您可以为该路由添加一个中间件,该中间件会在 PUT 上引发 MethodNotAllowedException 异常,或者只是在控制器本身中处理它,无论对您有用。
    猜你喜欢
    • 1970-01-01
    • 2015-09-06
    • 2013-11-10
    • 2019-03-10
    • 2013-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-24
    相关资源
    最近更新 更多