【LARAVEL】バリデーション
バリデーションの使用例
入力された値をコントローラ内でチェックする処理。
failsメソッドの実行タイミングでバリデーションが行われる。
class UserController extends Controller
{
public function register(Request $request)
{
// すべての入力値を取得し$inputsに保持する…➀
$inputs = $request->all();
// バリデーションルールを定義する…➁
$rules = [
'name' => 'required',
'age' => 'integer',
];
// ➀と➁をValidatorファサードのmakeメソッドに渡し、
// $validatorインスタンスを取得
$validator = Validator::make($inputs,$rules);
if($validator->fails()){
// 値エラーの場合の処理
}
// 値が正常だった場合の処理
}
}
複数のルールを指定する方法
2通りのやり方がある
$rules = [
// 配列で指定
'email' => ['required','email'],
// パイプラインで区切る
'age' => 'required|integer',
];
ほかの対象と比較するルール
複数のフィールドを比較
confirmed…確認済の
$rules = [
// emailとemail_confirmedが同値であることを確認
'email' => 'confirmed',
];
uniqueルールの指定
$rules = [
// usersテーブルの同名カラムと、
入力フィールドの値を比較して重複しないことを確認
// …キー値が表す入力フィールド(name)と同名のカラムを
// 対象とするときは、テーブル名だけを指定する
'name' => 'unique:users',
// usersテーブルのemailカラムと、
mailフィールドの値を比較して重複しないことを確認
// …入力フィールドとは異なるカラム名と比較する場合は、
// 追加でカラム名を指定する
'mail' => 'unique:users,email',
// 上記と同じルールだが、idが100のレコードは重複を許可する
'mail' => 'unique:users,email,100',
];
バリデーション失敗時の処理
・Laravelでは、バリデーションチェックの結果はMessageBagオブジェクト(Illuminate\Support\MessageBagクラスのインスタンス)で保持されている。
・ビューでは常に$errors(MessageBagインスタンス)が用意されている。
ルールのカスタマイズ
・ルールの追加
Validatorクラスのextendメソッド
・特定の条件のみルールを追加
Validatorクラスのsometimesメソッド
参照: