accepted_if — 条件付きで「同意」を必須にするバリデーション

validation

カテゴリ: validation
掲載バージョン: Laravel 12・PHP 8.4
ルール名: accepted_if
関連: accepted, required_if, required_unless
変更履歴: Laravel 8.41 以降で追加

要点(TL;DR)

  • 他フィールドが特定の値のときだけ「同意済み(accepted)」を要求する
  • accepted_if:other,value の形式で指定する
  • チェックボックス未送信時はキー自体が存在しない点に注意

概要

accepted_if は、別の入力値に応じて同意チェックを必須化したい場合に使うバリデーションルール。
利用規約や追加オプションの同意など、条件付きフォームでの実装に向いている。
同意とみなされる値は accepted と同じ定義が使われる。

構文 / シグネチャ

'field' => 'accepted_if:other,value'

引数

引数必須説明
otherstringyes判定に使う別フィールド名
valuemixedyesother がこの値のときに有効

戻り値
バリデーション通過時は true 相当。失敗時は ValidationException。

accepted とみなされる値
yes, on, 1, true(文字列 / 数値 / boolean)

使用例

最小例

$request->validate([
    'subscribe' => ['required', 'boolean'],
    'terms' => ['accepted_if:subscribe,1'],
]);

subscribe が 1 のときだけ terms の同意が必須になる。

実務例

use Illuminate\Http\Request;

public function store(Request $request)
{
    $validated = $request->validate([
        'plan' => ['required', 'in:free,pro'],
        'pro_terms' => ['accepted_if:plan,pro'],
    ]);

    // pro プラン選択時のみ pro_terms が必須
}

よくある落とし穴・注意

  • チェックボックスが未チェックだとリクエストにキー自体が含まれない
    → JavaScript 側で hidden を用意するか、仕様として理解しておく
  • value は厳密比較ではない
    → boolean / 数値 / 文字列の混在に注意
  • accepted_if は required_if の代替ではない
    → 同意判定専用。単なる必須化なら required_if を使う

代替・関連APIとの比較

  • accepted
    常に同意必須。条件分岐なし
  • required_if
    条件付き必須だが、値の内容までは検証しない
  • required_unless
    条件が逆になるケース向け

選定基準
同意チェックかどうかで accepted 系と required 系を使い分ける。

テスト例(Pest)

it('requires acceptance only when condition matches', function () {
    $rules = [
        'option' => ['required'],
        'agree' => ['accepted_if:option,yes'],
    ];

    $this->assertTrue(
        validator(['option' => 'no'], $rules)->passes()
    );

    $this->assertFalse(
        validator(['option' => 'yes'], $rules)->passes()
    );
});

トラブルシュート(エラー別)

症状原因対処
常にエラーになるvalue の型不一致リクエスト値を確認
チェックしても通らない値が accepted 判定外on / 1 / true を送信
フィールドが未定義チェック未送信hidden フィールド追加

参考リンク

レン (Wren)

こんにちは。レンです。

Laravelのコードの森に住んでいる、小さな案内役です。
ルーティングの枝やクラスの影を歩きながら、コードの流れや仕組みを眺めています。

このサイトでは、Laravelの基本から実装のコツまで、開発で役立つポイントを静かに整理しています。
難しいことを増やすのではなく、コードの見通しが少し良くなるヒントを届けるのが役目です。

「この処理はどこに書くのがいいのか」
「Laravelではどう考えると整理できるのか」

そんな疑問に、小さなメモを残すような気持ちで記事を書いています。

コードを書いている途中で迷ったとき、
このサイトが少し立ち止まって整理できる場所になればうれしいです。

レン (Wren)をフォローする