Laravel+Livewire结合Laratrust编辑角色时权限复选框默认未选中问题
问题诱因
- Livewire中
wire:model的状态优先级高于HTML原生的checked属性:你给复选框绑定了wire:model.defer="selectedIds",Livewire会完全以组件内的selectedIds数组值为准控制选中状态,你手动写的checked属性会被渲染逻辑覆盖,不会生效。 - 组件初始化时
selectedIds为空:你在mount方法中只完成了角色基础数据的赋值,没有把当前角色已关联的权限ID写入selectedIds数组,初始空数组对应的就是无复选框选中的状态。
修复步骤
步骤1:修改Livewire组件RolesEdit.php的mount方法
给selectedIds初始化赋值,把当前角色已关联的权限ID存入数组:
public function mount(Role $role) { $this->role = $role; $this->data = $role->toArray(); // 新增以下代码,读取角色已有权限ID初始化选中列表 $this->selectedIds = $role->permissions->pluck('id')->toArray(); }
步骤2:删除Blade模板中手动添加的checked判断
因为wire:model已经能自动根据selectedIds的值控制选中状态,手动写的checked属性已无作用,反而可能引发状态冲突,把input标签里的这段逻辑删除即可:
{{-- 移除这段判断代码 --}} {{ $role->permissions->contains($permission->id) ? 'checked' : '' }}
修改后复选框的选中状态完全由selectedIds控制,页面加载时就会自动勾选当前角色已有的权限。
内容的提问来源于stack exchange,提问作者John Deck
相关产品推荐
相关产品推荐

