2016-07-24 20 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異常,或者只是在控制器本身處理它,無論適用於你。 –

相關問題