You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel 8中如何保存动态复选框的会话状态?

解决Blade循环生成复选框验证错误后保留选中状态的问题

你的代码存在几个关键问题,导致验证错误后无法保留复选框的选中状态,以下是修正后的完整代码及问题说明:

修正后的代码

<div class="row">
    <div class="col-12">
        <form class="needs-validation" method="POST" action="{{ route('application.examination.student.store') }}" enctype="multipart/form-data" novalidate>
            {{ csrf_field() }}
            <div class="form-group form-row">
                <label class="text-primary col-md-3"><b class="text-danger">*</b> Select your exam units</label>
                <div class="col-md-8 pl-3">
                    @foreach($package_courses as $package_course)
                        <div class="col-sm-9">
                            <div class="custom-control custom-checkbox col-sm-10">
                                <input 
                                    type="checkbox" 
                                    class="custom-control-input @error('exam_units') is-invalid @enderror" 
                                    id="{{$package_course->code}}" 
                                    name="exam_units[]" 
                                    value="{{$package_course->id}}" 
                                    {{ in_array($package_course->id, old('exam_units', [])) ? 'checked' : '' }} 
                                    required
                                >
                                <label class="custom-control-label" for="{{$package_course->code}}"><b>{{$package_course->code}} {{$package_course->title}}</b></label>
                            </div>
                        </div>
                    @endforeach
                    @error('exam_units')
                        <div class="invalid-feedback">
                            {{ $message }}
                        </div>
                    @enderror
                </div>
            </div>
            <div class="row justify-content-end mt-4">
                <div class="col-sm-2">
                    <button type="submit" class="btn btn-primary btn-block mb-2">Apply</button>
                </div>
            </div>
        </form>
    </div>
</div>

关键修改点

  1. 选中状态判断逻辑修正
    原代码用old('exam_units') == '$package_course->id'判断,由于old('exam_units')返回的是数组(字段名是exam_units[]),直接用==比较永远不成立。改为in_array($package_course->id, old('exam_units', [])),通过数组包含检查来判断当前选项是否被选中,同时添加默认空数组避免首次加载时的null报错。

  2. 错误提示类的字段名修正
    原代码@error('{{$package_course->code}}')指定的字段名错误,表单字段实际名称是exam_units,改为@error('exam_units')才能正确触发错误样式。

  3. 添加全局错误反馈块
    在循环结束后添加@error('exam_units')的反馈区域,确保验证错误信息能正常显示给用户。

内容的提问来源于stack exchange,提问作者Nijani.N

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 01:27:36