Laravelでバリデーションを設定する
Laravelはバリデーションも簡単に設定できて便利です。
Controllerに直接バリデーション処理を記載することもできますが、分けたほうが可読性が上がるので私個人としてはRequestClassで設定するほうが好きです。
このサイトを参照しました
artisanを実行
まずはコンソールで下記コマンドを実行。
RequestValidateの箇所はクラス名になりますので、任意の名前をつけてください。
$ php artisan make:request RequestValidate
下記パスにバリデーションクラスが作成されます。
{project}/app/Http/Requests/RequestValidate.php
必要な箇所を修正します。
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return true; // 初期状態ではfalseになっているのでtrueに修正
}
次にrulesを設定。
ここではreturnで返却するkeyに入力項目のname、Valueにどのバリデーションを行うか指定します。
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
'name' => 'required|max:10',
'email' => 'email'
];
}
上記の例ではnameに必須と最大10文字まで、emailにはemail形式で入力されているかチェックするという内容になっています。
値で指定できるバリデーションには様々なものが用意されています。
下記ページなどを参照してください。
bladeファイルに以下のようなエラー文言を表示させる処理を追記しましょう。
@if ($errors->any())
<div class="alert alert-danger">
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif
初期状態ではエラー文言がすべて英語なので、日本語にするにはバリデーションクラスに戻ってmessagesを追加する必要があります。
public function messages()
{
return [
'name.required' => ':attributeが入力されていません',
'name.max' => ':attributeは10文字までです',
'email.email' => ':attributeはメールアドレスの形式ではありません'
];
}
ここではrulesで設定したバリデーションチェックで引っかかった場合、どのようなエラー文言を表示するか設定できます。
returnで返却するkeyには入力項目のname + どのバリデーション時かを指定します。
valueにはエラー文言を指定します。
項目名を直接指定してもOKなのですが、今回は:attributeと記載しています。
最後にattributesを追加します。
public function attributes()
{
return [
'name' => '氏名',
'email' => 'メールアドレス',
];
}
keyに項目のname、valueに論理名を指定します。
ここで指定した項目が、messagesの:attributeで変換されます。
これでエラー文言が日本語で正しく表示されるようになりました。