Laravelのバリデーションに関してのメモ書き。
特に、コントローラに記述する方法について。
コントローラ以外に記述する方法については、下記記事で紹介しているので、参考に。
バリデーションとは
ユーザからの入力値が正しいかどうか、チェックすること。
悪意のある入力の場合、無効化する
バリデーションの使い方
基本的に、コントローラのアクションメソッド内に、
validate()メソッドを記述して、バリデーションする。
viewのフォームから送られてきた値を、controllerに記述したバリデーションでチェックする。
バリデーションの書き方
コントローラのアクション内に、validateメソッドを記述する。
$this->validate($rquest, [検証設定の配列])
validateメソッドは、Contorollerクラスのメソッド。
第一引数には、ユーザからの入力値を$requestで指定し、
第二引数には、バリデーションの設定を記述した配列を指定する。
第二引数の配列(検証設定)の書き方
[
'項目名' => '割り当てる検証ルール',
'項目名' => '割り当てる検証ルール',
....略
]
項目名はフォームで送られてくる値のnameを指定する。
割り当てる検証ルールは、指定した項目にかけたいバリデーション名を指定する。
|(パイプ)で複数のバリデーションを繋げて指定することもできる。
以下例
//バリデーションあり
public function post(Request $request) {
$validate_rule = [
'name' => 'requied',
'mail' => 'email',
'age' => 'numeric|between:0,150,
];
$this->validate($request, $validate_rule);
return view('hello.index', ['msg'=>'正しく入力されました']);
}
return viewする前にバリデーションを実行している。
このとき入力値に問題があれば、return viewには進まず、再度フォームを表示する。
バリデーションエラー時
バリデーション時エラーの場合でフォームを再表示した際、
「エラーメッセージ」や「前回の入力内容」を取り出すことができる。
取り出し方は、バリデーション結果をまとめてくれる$errorsという変数を使用する
#$errors変数から、エラー内容を取得、表示する例(view)
@section('content')
@if (count($errors) > 0)
<div>
<ul>
@foreach ($errors->all() as $error )
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif
...
特定の項目でエラーがあったか調べる
$errors->has(‘項目名’)
指定の項目でエラーがあった場合、trueが返される。
全てのエラーメッセージの取り出し
$errors->all()
$errors->all()とすることで、エラーメッセージを配列にまとめて取り出すことができる。
foreachで、順に値を取り出すなどの取り扱いをする。
指定した項目の最初のエラーメッセージを文字列で取得
$errors->first()
$errors->first()とすることで、指定した項目の最初のエラーメッセージを取得する。
指定した項目のエラーメッセージすべてを文字列で取得
$errors->get()
エラーメッセージは一、項目に対し一つとは限らない。
$errors->get()とすることで、first()と異なり、指定した項目のエラーメッセージ全てを取得する。
検証ルール
検証ルールは多いので、この記事では紹介しない。
適宜調べるなどしてほしい。
また関連記事として、コントローラ以外に記述する方法については、下記記事で紹介しているので、参考に。
https://readouble.com/laravel/8.x/ja/validation.html