カテゴリ: 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 | 値を確認し否定値に合わせる |
参考リンク
- Laravel Validation – Declined
https://laravel.com/docs/validation#rule-declined

