Laravel项目勾选switch按钮提交后状态未更新问题咨询
问题根因
你遇到的字段不更新的问题主要由以下几个常见原因导致:
- 复选框的特性:浏览器默认不会提交未勾选的复选框字段,当你取消switch选中状态时,后端请求参数里根本没有
cas_suivi字段,批量更新时就会跳过这个字段的修改 - 批量赋值过滤:如果
cas_suivi没有加到Patient模型的$fillable属性里,或者没有加到表单请求UpdatePatientRequest的允许字段列表中,会被Laravel的批量赋值保护机制直接过滤 - 复选框配置错误:你没有给复选框设置
value属性,默认提交的值为on,如果和你数据库存储的预期值不匹配,就会导致更新失败;同时你的代码里重复写了type="checkbox"属性,也可能存在潜在的渲染异常 - 状态判断逻辑错误:你当前选中状态的判断条件是
$patient->cas_suivi == "cas_suivi",如果数据库存储的不是字符串cas_suivi(比如存的是布尔值1/0),这个判断逻辑完全不生效 - 控制器返回逻辑错误:更新后直接返回视图,会导致页面刷新时重复提交表单,也可能出现旧数据渲染的问题
修复方案
1. 修正前端代码
增加同name的隐藏输入框,用来传递未勾选时的默认值,删除重复的type属性,给复选框设置正确的value,同时根据你的存储值调整状态判断逻辑:
注意:隐藏输入框要放在复选框前面,这样复选框勾选时提交的值会覆盖隐藏框的默认值
<div class="col-4 text-left"> <form id="form" class="was-validated" method="POST" action="{{ route("admin.patients.update", [$patient->id]) }}" enctype="multipart/form-data"> @method('PUT') @csrf <div style="float: right"> <label class="switch"> <!-- 未勾选时默认传0,可根据你的业务需求调整默认值 --> <input type="hidden" name="cas_suivi" value="0"> <!-- 此处value根据你数据库存储的选中值调整,下面是两种常见场景 --> <!-- 场景1:数据库存布尔值1代表选中 --> <input type="checkbox" onchange="$('#form').submit();" name="cas_suivi" id="cas_suivi" value="1" {{ $patient->cas_suivi ? ' checked' : '' }} > <!-- 场景2:数据库存字符串cas_suivi代表选中,就用下面这行替换上面的复选框代码 --> <!-- <input type="checkbox" onchange="$('#form').submit();" name="cas_suivi" id="cas_suivi" value="cas_suivi" {{ $patient->cas_suivi == 'cas_suivi' ? ' checked' : '' }} > --> <div class="slider"></div> </label> </div> </form> </div>
2. 配置批量赋值权限
- 打开
app/Models/Patient.php,确认cas_suivi在$fillable数组中:
protected $fillable = [ // 其他已配置的可填充字段 'cas_suivi', ];
- 打开
app/Http/Requests/UpdatePatientRequest.php,确认cas_suivi在验证规则列表中:
public function rules() { return [ // 其他已配置的验证规则 'cas_suivi' => 'required|boolean', // 如果是存字符串就把规则改成required|string|in:cas_suivi,其他值 ]; }
3. 修正控制器逻辑
更新完成后用重定向跳转回详情页,避免刷新页面重复提交表单:
public function update(UpdatePatientRequest $request, Patient $patient) { $patient->update($request->all()); return redirect()->route('admin.patients.show', $patient)->with('success', 'Le patient a bien été modifié'); }
内容的提问来源于stack exchange,提问作者Saliou MBALO
相关产品推荐
相关产品推荐

