前置き
アンケートで問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内で複雑な条件を記載することができます。
ではでは。