0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

LaravelのFormRequestで条件付きバリデーションを行う

Last updated at Posted at 2024-10-03

前置き

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

ではでは。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?