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

Laravel中如何基于已分配权限数组正确渲染带选中状态的复选框

Laravel权限复选框重复渲染问题修复方案

问题原因

出现复选框重复的核心原因是嵌套了两层循环:外层遍历全部权限(4次),内层遍历已分配权限(2次),每一个权限都会输出和已分配权限数量相等的复选框,最终总数是4*2=8个,远超预期的4个。

修复方案

先把已分配权限的ID提取为一维数组,遍历全部权限时直接判断当前权限ID是否在已分配ID数组中即可,无需嵌套循环。

第一步:提取已分配权限ID数组

可以在Blade模板顶部先处理,也可以提前在控制器中处理好传到模板:

// 如果 $assigned_vendor_permissions 是Laravel集合
@php $assignedPermissionIds = $assigned_vendor_permissions->pluck('id')->toArray(); @endphp

// 如果 $assigned_vendor_permissions 是原生数组
@php $assignedPermissionIds = array_column($assigned_vendor_permissions, 'id'); @endphp

第二步:修改循环渲染代码

去掉内层循环,直接通过in_array判断是否选中:

@foreach ( $vendor_permissions as $vendor_permission )             
    <td style="width: 15%">
        <label class="checkbox">
            <input 
                type="checkbox" 
                name="permissions[]" 
                id="{{ $vendor_permission->name }}" 
                {{ in_array($vendor_permission->id, $assignedPermissionIds) ? 'checked' : '' }} 
                value="{{ $vendor_permission->id }}"
            >
            <span></span>
        </label>
    </td>                        
@endforeach

如果用Laravel的集合方法,也可以直接用contains判断,不用转数组:

{{ $assigned_vendor_permissions->contains('id', $vendor_permission->id) ? 'checked' : '' }}

优化建议

如果是频繁用到的判断逻辑,推荐在控制器中就把$assignedPermissionIds处理好传到模板,减少模板层的逻辑处理,性能也更好。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.13 00:15:01