登録日:
2025-03-06
最終更新日:
2025-03-23
Laravel チェックボックス old 設定方法
Laravelの old() 関数を使用して、チェックボックスの値を保持する方法を説明します。
old() を使ったチェックボックスの設定
チェックボックスは checked 属性を old() で制御します。
<input type="checkbox" name="agree" value="1" {{ old('agree') ? 'checked' : '' }}>
ポイント
- old('agree') が true の場合、checked が追加される
- checked があると、チェックされた状態になる
フォーム送信時にチェックボックスを old() で保持
以下のように checked の有無を old() で判定します。
<form method="POST" action="{{ route('submit') }}">
@csrf
<label>
<input type="checkbox" name="subscribe" value="1" {{ old('subscribe') ? 'checked' : '' }}>
メールマガジンを購読する
</label>
<button type="submit">送信</button>
</form>
動作
- フォームを送信し、バリデーションエラーなどで再表示されたときに、チェックボックスの状態を維持
チェックボックスのデフォルト値を設定
もし 最初からチェックされた状態にしたい 場合は、old() のデフォルト値を true にできます。
<input type="checkbox" name="subscribe" value="1" {{ old('subscribe', 1) ? 'checked' : '' }}>
動作
- old('subscribe') の値が null(初回表示時)なら、1 をデフォルト値として使用
- ユーザーが一度送信して subscribe をオフにしても、その状態を保持
複数のチェックボックスを扱う
複数のチェックボックスを配列として処理する場合は、old('name.*') を使います。
<label>
<input type="checkbox"
name="options[]"
value="option1"
{{ in_array('option1', old('options', [])) ? 'checked' : '' }}>
オプション1
</label>
<label>
<input type="checkbox"
name="options[]"
value="option2"
{{ in_array('option2', old('options', [])) ? 'checked' : '' }}>
オプション2
</label>
<label>
<input type="checkbox"
name="options[]"
value="option3"
{{ in_array('option3', old('options', [])) ? 'checked' : '' }}>
オプション3
</label>
動作
- old('options', []) が配列で返るので、in_array() を使ってチェック済みか確認
- 送信後、選択されたチェックボックスのみ保持
コントローラーでの処理
チェックボックスがオフの時、リクエストには送信されないため、デフォルト値を設定すると便利です。
public function store(Request $request)
{
$validated = $request->validate([
'subscribe' => 'nullable|boolean',
'options' => 'nullable|array',
'options.*' => 'string',
]);
$subscribe = $request->has('subscribe') ? 1 : 0; // チェックがなければ0を設定
return back()->withInput(); // old()で値を保持
}
動作
- has('subscribe') を使うことで、未選択時に null にならず、0 をセットできる
まとめ
シナリオ | 設定方法 |
---|---|
シンプルなチェックボックス | {{ old('agree') ? 'checked' : '' }} |
デフォルトでチェックあり | {{ old('agree', 1) ? 'checked' : '' }} |
配列のチェックボックス | {{ in_array('option1', old('options', [])) ? 'checked' : '' }} |
未選択時のデフォルト値 | has('subscribe') ? 1 : 0 |