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

Laravel如何在表单验证报错后保留复选框的选中状态?

问题根因

  • 你当前代码的判断逻辑和实际提交的value不匹配:复选框定义的value是字符串delete-user,但你判断时是查找old('permissions')中是否存在数字1,永远匹配不到,自然不会触发checked状态。
  • 用old('permissions.'.$key)的写法不符合表单提交逻辑:只有选中的复选框才会被提交到permissions[]数组中,提交后的数组索引是连续生成的,和页面上原有复选框的索引没有对应关系,因此无法通过固定索引拿到对应值。

正确实现方案

直接判断当前复选框的value是否存在于old('permissions')数组中即可,同时兼容old值不存在的场景:

<input 
    type="checkbox" 
    id="delete-user" 
    class="form-check-input" 
    data-data-section="users" 
    name="permissions[]" 
    value="delete-user" 
    {{ (is_array(old('permissions')) && in_array('delete-user', old('permissions'))) ? ' checked' : '' }}
>

如果是循环渲染多个权限复选框的场景,假设循环变量为$perm,权限值字段为value,可以统一封装逻辑:

@foreach($permissions as $perm)
<input 
    type="checkbox" 
    id="perm-{{ $perm->id }}" 
    class="form-check-input" 
    data-data-section="users" 
    name="permissions[]" 
    value="{{ $perm->value }}" 
    {{ (is_array(old('permissions')) && in_array($perm->value, old('permissions'))) ? ' checked' : '' }}
>
<label class="form-check-label" for="perm-{{ $perm->id }}">{{ $perm->name }}</label>
@endforeach

如果需要兼顾首次加载时回填数据库中已保存的权限,假设已选权限存储在$userPermissions数组中,可以扩展判断逻辑:

{{ (is_array(old('permissions')) && in_array($perm->value, old('permissions'))) || in_array($perm->value, $userPermissions) ? ' checked' : '' }}

内容的提问来源于stack exchange,提问作者Duddy67

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 11:54:04