2016-07-24 7 views
0

私のコントローラの1つで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のリソースコントローラは2つの方法を同じものとして扱います。インプリメンテーションがリソースの書き込み/置換、または単にそれに「パッチ」するのはあなた次第です。 PUTを拒否したい場合は、PUTで​​MethodNotAllowedException例外をスローするミドルウェアをそのルートに追加するか、コントローラ自体の中で何らかの処理をするだけのミドルウェアを追加することができます。 –

関連する問題