2017-02-07 23 views
1

は私がフォーマットFormRequest検証エラー応答

public function rules() 

{ 
    return [ 
     'amt' => 'required|numeric|min:1000', 
     'year' => 'required|numeric|min:' . date_format(new \DateTime, 'Y'), 
     'user_id' => 'required', 
     'ratio' => 'required' 
    ]; 
} 

public function response(array $errors) 
    { 
     if ($this->expectsJson()) { 
      return response()->json(['messsage'=>'Cannot Validate','errors'=> $errors]); 
     } 

     return $this->redirector->to($this->getRedirectUrl()) 
             ->withInput($this->except($this->dontFlash)) 
             ->withErrors($errors, $this->errorBag); 
    } 

/** 
    * Format the errors from the given Validator instance. 
    * 
    * @param \Illuminate\Contracts\Validation\Validator $validator 
    * @return array 
    */ 
    protected function formatErrors(Validator $validator) 
    { 
     return []; 
    } 
を持っている\ CustomRequestを要求します私のコントローラで

私はちょうど「typehint」要求をする必要がlaravelのドキュメントによると

/** 
    * Store a newly created resource in storage. 
    * 
    * @param \Illuminate\Http\Request $request 
    * 
    * @return Response Header 201 
    */ 
    public function store(CustomFormRequest $request) 
    { 

     $requestData = $request->all(); 
     Budget::create($requestData); 

     return response([], 201); 
    } 

を持っています。しかし、私の反応は常にです。

{ "ID": "validation_failed"、 "メッセージ": "検証 に失敗しました。"、 "メタ":{ "エラー":{ "AMT":[{ "ルール": "min.numeric 」、 "メッセージ": " AMTは少なくとも1000"、 "パラメータでなければなりません。":[ "1000"]}]}}}

私が変えてる場合は意味がありません。応答形式。 "検証 に失敗しました。" "エラー": "validation_failed"、 "メッセージ":[{ "AMT":{ "メッセージ": " AMTなければならないこと私に必要なのは、{ "ID"

です少なくとも1000である必要があります。」}}}}

私はこの時点で何をすべきか分かりません。他には何があるの?

+1

デフォルト出力を上書きする機能が実装されました。だからまだ必要ならば、パッケージのreadmeを見てください。 –

答えて

1

サイドチャネル通信(IRC)はケンドールはlanin/laravel-api-exceptionsを使用していることを明らかにしました。このパッケージには、LaravelのビルトインValidationExceptionをカスタム例外クラスとカスタム出力処理に変更するカスタム例外ハンドラがあります。出力がLaravelによって生成されなかったというヒントは、json出力のmetaキーになる可能性があります.Laravelはそれを生成しません。

質問には、FormRequestのresponse(array $errors)およびformatErrors(Validator $validator)メソッドが記載されていますが、これらはこのパッケージでは使用されていません。

検証エラーのjson結果は、カスタム例外ハンドラのrenderForApiメソッドをオーバーライドしてValidationFailedApiExceptionをチェックし、これらのカスタム応答を返します。

-1

カスタムエラーメッセージを表示するには、messagesメソッドを探しているとします。そのメソッドでは、単に配列を返します。

例:['fieldName.rule' => 'Custom message']

参照:https://laravel.com/api/5.3/Illuminate/Foundation/Http/FormRequest.html#method_messages

ボーナス:あなたはまた、フィールド名を名前にしたい場合は、単にattributes方法を作ります。

参照:https://laravel.com/api/5.3/Illuminate/Foundation/Http/FormRequest.html#method_attributes

+0

私は実際にテキストメッセージを変更しようとはしていませんが、もっとjsonオブジェクト構造を.... – Kendall