2016-07-24 50 views
0

我试图在我的一个控制器上删除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'); 

虽然上面会的工作,我觉得这是凌乱的,我希望能为一个清晰的解决方案。

回答

0

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

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

问题是,它还删除了'PATCH'请求方法,我想保留它。我希望api能够更新('PATCH')资源,而不是替换('PUT')整个事情。 – JRLambert

+0

不幸的是,Laravel的资源控制器将这两种方法视为相同。如果您的实施写入/替换资源或仅“修补”它,则取决于您。如果你想禁止PUT,你可以为该路由添加一个中间件,该中间件可以在PUT上抛出MethodNotAllowedException异常,或者只是在控制器本身处理它,无论适用于你。 –