LoginSignup
16

More than 5 years have passed since last update.

Laravelで指定したフィールドのうちの1つ以上の入力を判定したい時のバリデーション実装

Posted at

例えばこのようなフォームがあったとして、

例えばこんなフォーム
<textarea name="article_1"></textarea>
<textarea name="article_2"></textarea>
<textarea name="article_3"></textarea>
<textarea name="article_4"></textarea>
<textarea name="article_5"></textarea>

article_1〜article_5のうちのどれかが入っていればOK(全部空だとエラー)というバリデーションを行いたいとする。

使用可能なバリデーションルールはこんな感じ

使用可能なバリデーションルールを見たところでは、以下のバリデーションが使えそうなところ

required_without_all:foo,bar,...
フィールドは、指定された他のフィールド全部が存在しない場合のみ、この項目が入力されていることをバリデートします。

実装するならこんな感じ

バリデートするフィールドを設定し、常に空の状態にする。

例えばこんなフォーム
<input type="hidden" name="articles" value="">
<textarea name="article_1"></textarea>
<textarea name="article_2"></textarea>
<textarea name="article_3"></textarea>
<textarea name="article_4"></textarea>
<textarea name="article_5"></textarea>

判定したいフィールドを「required_without_all」で全て指定する。

public function rules()
{
    return [
        'articles' => 'required_without_all:article_1,article_2,article_3,article_4,article_5'
    ];
}

public function messages() {
    return [
        'articles.required_without_all' => 'articleは一つ以上入力してください。'
    ];
}

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
16