質問: Validator::make($request->all(), [ 'title' => 'required|unique:posts|max:255', 'body' => 'required', ]); // ここで、$validator->failed でバリデーションに引っかかった項目とルールを取得したい if ($validator->fails()) { $this->throwValidationException($request, $validator); } ``` 参考: Larvalのバリデーションは、 要は Illuminate/Validation/Validator 型の $validator->fails の返り値 がfalseかで判断していると思うのですが、 同じ場所で$validator->failed を使っても、 返り値が空の配列になってしまいます。 APIでは > > array failed() > > Get the failed validation rules. > > > 参考:https://laravel.com/api/5.3/Illuminate/Validation/Validator.html#method_failed とありますし、 一度はちゃんと返り値に値が入っていたのをvar_dump()で見たのですが、 その後再現できずにいます。 調査中に、 ``` $validator->getMessageBag()->keys(); ``` として、項目とエラーメッセージを取ることはできたのですが、 できればどのルールでエラーなのかを一発で取りたいです。 「〜の理由でfailed()で取れてないのでは」 「〜のメソッドなら取れるのでは」 など何かアドバイスいただけたらありがたいです。 よろしくお願いいたします。
回答: 順序の問題ではないでしょうか。 Illuminate\Validation\Validatorのコードを見た限り、failsが実行されたとき、初めて実際にバリデーションが行われているようです。fails()実行後でないとfailedは取れないのではないでしょうか。 ``` if ($validator->fails()) { var_dump($validator->failed); $this->throwValidationException($request, $validator); } ```