declined — 明示的な否定を検証するバリデーションルール

validation

カテゴリ: validation
掲載バージョン: Laravel 12・PHP 8.4
名前空間 / FQCN / コマンド: declined
関連: accepted, prohibited, required_if
変更履歴: Laravel 8 で追加。以降のバージョンで仕様変更なし

要点(TL;DR)

  • チェックボックスや選択項目が「拒否・いいえ・無効」を表す値かを検証する
  • 'agree' => ['declined']
  • 未送信や null は不合格。明示的な否定値が必要

概要

declined は、ユーザーが明確に「いいえ」「拒否」を選択したかどうかを検証するためのルール。
利用規約に同意しない、機能を無効化する、といった否定意思を必須にしたい場面で使う。
accepted の逆の意味を持ち、値の有無ではなく内容が否定であることを重視する。

構文 / シグネチャ

'field' => 'declined'

判定される否定値

以下のいずれかに一致した場合のみ合格となる。

  • false
  • 0
  • ‘0’
  • ‘false’
  • ‘off’
  • ‘no’

引数

なし

戻り値

バリデーション結果が true の場合に通過

例外 / 副作用

なし

使用例

最小例

$request->validate([
    'newsletter' => ['declined'],
]);

newsletter が「配信しない」と明示されている場合のみ通過する。

実務例

use Illuminate\Http\Request;

public function store(Request $request)
{
    $validated = $request->validate([
        'tracking_opt_out' => ['required', 'declined'],
    ]);

    // トラッキング拒否を前提に処理を進める
}

プライバシー設定などで、拒否の意思表示が必須な場合に使う。

よくある落とし穴・注意

  • フィールド未送信は不合格になる
    チェックボックス未チェック=送信されないケースでは required と組み合わせが必要
  • 空文字や null は否定とみなされない
  • accepted の対義語だが、単純に !accepted では代替できない

代替・関連APIとの比較

  • accepted
    明示的な同意を検証する。declined とは真逆の用途
  • prohibited
    フィールド自体を送信させたくない場合に使用
  • required_if
    条件付きで declined を要求したい場合に併用する

選定基準として、「否定の意思を必須にしたい」なら declined を使う。

テスト例(Pest)

it('accepts declined values', function () {
    $rules = ['opt_out' => ['declined']];

    expect(validator(['opt_out' => 'no'], $rules)->passes())->toBeTrue();
    expect(validator(['opt_out' => 'yes'], $rules)->passes())->toBeFalse();
});

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

症状/エラー原因対処
常にバリデーションエラーになるフィールドが送信されていないrequired を追加する
false を送っているのに失敗するJSON ではなく文字列 true/false値を確認し否定値に合わせる

参考リンク

レン (Wren)

こんにちは。レンです。

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

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

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

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

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

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