前置き
アンケートで問1で1〜5を選択する設問があり、問2は問1の回答が3〜5の時必須の自由入力の場合を想定しています。
FormRequest
まずは、FormRequestを継承したMyRequestを作成します。
php artisan make:request MyRequest
Controller内のRequestをMyRequestとすれば、バリデーションをRequest内ですることができます。今回はファイル名をMyRequest
としていますが、自由に変更していいです。
バリデーション
次にMyRequest内でバリデーションの定義をする場合、rules
に追加していきます。
public function rules()
{
return [
'question_1' => 'required|numeric|min:1|max|5,'
];
}
とりあえず、question_1
がバリデーションの対象、required|numeric|min:1|max|5
が必須かつ1〜5の数字というバリデーションの定義にしています。
条件付きバリデーション
条件付きバリデーションを追加する場合は、MyRequest内でwithValidator
を追加します。
public function withValidator(Validator $validator)
{
$validator->sometimes('question_2', 'required|string|min:1|max:200', function ($input) {
return $input->question_1 > 2;
});
}
sometimes
を使って条件付きバリデーションを行なっています。question2
がバリデーションの対象、required|string|min:1|max:200
が必須かつ1〜200文字というバリデーションの定義、$input->question_1 >= 3
が問1の回答が3以上というバリデーションの条件となっています。今回は簡単な条件ですが、function内で複雑な条件を記載することができます。
ではでは。