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>
关键修改点
选中状态判断逻辑修正
原代码用old('exam_units') == '$package_course->id'判断,由于old('exam_units')返回的是数组(字段名是exam_units[]),直接用==比较永远不成立。改为in_array($package_course->id, old('exam_units', [])),通过数组包含检查来判断当前选项是否被选中,同时添加默认空数组避免首次加载时的null报错。错误提示类的字段名修正
原代码@error('{{$package_course->code}}')指定的字段名错误,表单字段实际名称是exam_units,改为@error('exam_units')才能正确触发错误样式。添加全局错误反馈块
在循环结束后添加@error('exam_units')的反馈区域,确保验证错误信息能正常显示给用户。
内容的提问来源于stack exchange,提问作者Nijani.N
相关产品推荐
相关产品推荐

