###前提・実現したいこと
現在、Laravel5.4にて、フォームリクエストを利用して、バリデーションの実装をしようとしております。
どのようにしましたら、以前のように、1つの項目名に対して複数のエラーを表示させることができるのでしょうか?
また、中途半端な日本語になってしまっているバリデーションエラーメッセージを、設定した日本語での表示に切り替えることができるのでしょうか?
フォームリクエストを利用する以前に、コントローラにバリデーションを書いていたときには、設定した項目名に対して、複数のエラーが生じた際には、複数のメッセージが表示されていたのですが、フォームリクエストを利用してからは、1つの項目名に対して、1つのエラーのみ表示されるようになってしまいました。
テンプレートには、$errors->first(項目名)ではなく、$errors->get(項目名)を使用し、
もしも、@errors に値が保管されている場合は、$errors からエラーメッセージをまとめて取り出して、@foreach を使い、順に出力していくようにしているつもりです。
どのようにしましたら、以前のように、1つの項目名に対して複数のエラーを表示させることができるのでしょうか?
また、エラーメッセージにつきましても、日本語にしようとしているのですが、それも中途半端になってしまっております。
日本語の設定をしているつもりのバリデーションルールも、日本語が当てがわれて表示されていない状態です。
私のブラウザ環境では、required は設定した日本語に変わっておりますが、文字数のバリデーションルールにつきましては、元の英語のままとなってしまっております。
そちらにつきましても、どのようにしましたら良いのでしょうか?
ご教示いただけますでしょうか? 何卒よろしくお願い申し上げます。
###発生している問題・エラーメッセージ
以下は、ブラウザでのバリデーションエラーメッセージです。
ERORR The age must be between 0 and 150. ← こちらが日本語になりません。 ERORR お名前は必ずご入力してください。 ← こちらは設定した日本語の通りに表示されております。
###該当のソースコード
Laravel5.4
HelloRequest.php
<?php namespace App\Http\Requests; use Illuminate\Foundation\Http\FormRequest; class HelloRequest extends FormRequest { /** * Determine if the user is authorized to make this request. * * @return bool */ public function authorize() { if($this->path() === 'hello'){ return true; } else { return false; } } /** * Get the validation rules that apply to the request. * * @return array */ public function rules() { return [ 'name' => 'required|string|between:2, 40', 'mail' => 'required|email', 'age' => 'numeric|between:0, 150', ]; } public function messages() { return [ 'name.required' => 'お名前は必ずご入力してください。', 'name.string' => 'お名前は文字でのご入力をお願いいたします。', 'name.between:2,40' => 'お名前は2文字以上、40文字以内にてお願いいたします。', 'mail.required' => 'メールアドレスは必ずご入力してください。。', 'mail.email' => 'メールアドレスの形式になっておりません。', 'age.numeric' => 'ご年齢は整数でのご入力をお願いいたします。', 'age.between:0,150' => 'ご年齢は 0 〜 150 の間でご入力をお願いいたします。', ]; } }
index.blade.php
@section('content') <p>{{$msg}}</p> @if (count($errors) > 0) <p>入力に問題があります。再入力してください。</p> @endif <table> <form class="" action="/hello" method="POST"> {{ csrf_field() }} @if ($errors->has('name')) <tr><th>ERORR</th><td>@foreach ($errors->get('name') as $error) <td>{{ $error }}</td> @endforeach</td></tr> @endif <tr><th>name:</th><td><input type="text" name="name" value="{{ old('name') }}"></td></tr> @if($errors->has('mail')) <tr><th>ERORR</th><td>@foreach ($errors->get('mail') as $error) <td>{{ $error }}</td> @endforeach</td></tr> @endif <tr><th>mail:</th><td><input type="text" name="mail" value="{{ old('mail') }}"></td></tr> @if($errors->has('age')) <tr><th>ERORR</th><td>@foreach ($errors->get('age') as $error) <td>{{ $error }}</td> @endforeach</td></tr> @endif <tr><th>age:</th><td><input type="text" name="age" value="{{ old('age') }}"></td></tr> <tr><th></th><td><button type="submit" name="" value="send">送 信</button></td></tr> </form> </table> @endsection
###補足情報(言語/FW/ツール等のバージョンなど)
Laravel5.4
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/10/11 08:55
2017/10/12 04:09