2017-11-14 17 views
0

私はFormRequestをルールとメッセージとともに削除メソッドに追加しようとしていましたが、要求は空に戻り、毎回ルールが失敗しています。リクエストボディのLaravel DELETEメソッド

リクエストデータを削除する方法はありますか?

ここに私の要求クラスがあります:

use App\Http\Requests\Request; 

class DeleteRequest extends Request 
{ 
    /** 
    * Determine if the user is authorized to make this request. 
    * 
    * @return bool 
    */ 
    public function authorize() 
    { 
     return true; 
    } 

    /** 
    * Get the validation rules that apply to the request. 
    * 
    * @return array 
    */ 
    public function rules() 
    { 
     return [ 
      'staff_id' => ['required', 'exists:users,uid'], 
      'reason' => ['required', 'string'], 
     ]; 
    } 

    /** 
    * Get custom messages for validator errors. 
    * 
    * @return array 
    */ 
    public function messages() 
    { 
     return [ 
      'staff_id.required' => staticText('errors.staff_id.required'), 
      'staff_id.exists' => staticText('errors.staff_id.exists'), 
      'reason.required' => staticText('errors.reason.required'), 
      'reason.string' => staticText('errors.reason.string'), 
     ]; 
    } 
} 

とコントローラ:

/** 
* Handle the 'code' delete request. 
* 
* @param integer $id   The id of the code to fetch. 
* @param DeleteRequest $request The request to handle the data. 
* @return response 
*/ 
public function deleteCode($id, DeleteRequest $request) 
{ 
    dd($request->all()); 
} 
+0

こんにちは、あなたのコードを示してください。任意のメソッドでリクエストデータを取得できるためです。おそらくdeleteメソッドでは、FormRequestオブジェクトをパラメータとして渡していないかもしれません。 –

+0

郵便配達員を使用したテスト。私はクエリのパラメータとしてデータを渡すが、フォームの本文としては渡さない場合は機能します。 – Imagine17

+0

あなたのDeleteRquestクラスはFormRequestを拡張する必要があるかもしれませんが、これは要求フォームを使用する正しいクラス(ビューで使用されるため)です。郵便配達員を使用してテストする場合は、過去の値をフォーム本体の構成で試してください。これは、ラーバルビューで使用されるのと同じフォームです。 –

答えて

3

HTTP/1.1の仕様が明示的にDELETE要求は、エンティティボディを持つべきではないと述べているしませんが、いくつかの実装あなたのデータを含むボディを完全に無視します。 JettyとTomcatのいくつかのバージョン。一方、一部のクライアントはそれを送信することもサポートしていません。

GET requestと考えてください。フォームデータを見たことがありますか? DELETEリクエストはほとんど同じです。

件名をたくさん読むことができます。ここからスタート:
RESTful Alternatives to DELETE Request Body

それはあなたがそれを破壊するのではなく、リソースの状態を変更にしたいということのように思えます。ソフト削除は削除ではないため、両方ともエンティティ本体をサポートするPUTまたはPATCHのいずれかの方法が必要です。ソフト削除が該当しない場合は、1回の呼び出しで2つの操作を行います。

今後の編集でもう少し詳しく説明します。

+0

ありがとう、データが正しく送信されていないことを意味する特定のLaravel "quirk"が欠けていたかどうかはわかりませんでした。あなたの説明は私のために多くのことを明確にします。 – Imagine17

関連する問題