2017-09-25 16 views
0

FormRequestで検証が失敗した場合、カスタムタグを追加する必要があります。FormRequestで検証が失敗した場合にレスポンスで追加データを追加する方法Laravel

<?php 

namespace App\Http\Requests; 

use Illuminate\Foundation\Http\FormRequest; 

class StoreMessage extends FormRequest 
{ 
    /** 
    * 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 [ 
      'name' => 'required|max:100', 
      'email' => 'required|email', 
      'message' => 'required|max:1000' 
     ]; 
    } 

    public function withValidator(\Illuminate\Validation\Validator $validator) 
    { 
     $validator->after(function ($validator) { 

       if($validator->fails()) { 
        $validator->errors()->add('status', 'error'); 
       } 

     }); 
    } 

} 

検証の私のいずれかが唯一、私は私がstatus = successを追加する必要があり、他のJSONレスポンスにstatus = errorを追加する必要が失敗した場合。また、私の応答ステータスが、私は0

{ 
    "message": "The given data was invalid.", 
    "errors": { 
    "name": [ 
     "The name may not be greater than 100 characters." 
    ], 
    "status": [ 
     "error" 
    ] 
    } 
} 

これの目的は、私がエラーかどうかを識別するためのフラグを必要とするフォームを送信するためにAjaxリクエストを送信していますされるレベルにそれを必要とerrorsタグの下にネストされ

発生したかどうか。これを行うためのより良い方法はありますか? 私は愚かな質問をしている場合は私を許してください。私はラベールに初心者です。 ご協力いただければ幸いです。

答えて

1

From the docs( "AJAX" を検索):AJAX要求中に検証方法を使用する場合

、Laravelは、リダイレクト応答を生成しないであろう。代わりに、Laravelはすべての検証エラーを含むJSON応答を生成します。このJSONレスポンスは、422 HTTPステータスコードとともに送信されます。

あなたのJavascriptでは、これはa .fail() handlerで発生します。

UPDATE単純な例では、複数の検証エラーをフォーマット扱うが、あなたのアイデアを提供しません。

$.ajax(...) 
.fail(function(xhr, status, error) { 
    if (error === 'Unprocessable Entity') { 
     // validation failure 
     var msg = '';  
     for (error in xhr.responseJSON) { 
      msg += xhr.responseJSON[error]; 
     }; 
     alert(msg); 
    } 
}); 
+0

「tは助けのおかげメイトパニック。クエリでは、ifブロック内のUnprocessable Entityを照合することは安全です。それは常にこれを返すか、最も安全な方法がありますか? – Abhishek

+1

@Abhishek良い質問です。私は安全だと思います.HTTPステータスのテキスト部分です(jQueryのドキュメントから引用されています)ので、常に正確に応答コード422と一致します。これがLaravelの検証失敗が返すもので、AFAIKは返さないその他の状況。 –

+0

ご協力いただきありがとうございます。 – Abhishek

関連する問題