Laravel编辑表单使用Select时角色已关联权限无法回显问题求助
解决方案
问题定位
代码中存在3处问题导致无法正常回显,部分问题还会影响提交逻辑:
- 多选框
name属性配置错误,参数名和后端接收逻辑不匹配,且多选场景未添加数组标识 - 选项选中判断逻辑错误,调用了不存在的
$role->permission属性,未正确判断当前权限是否属于该角色 - 控制器edit方法中compact传入了未定义的冗余变量
permissions1
修复步骤
1. 优化控制器代码
移除edit方法中不存在的冗余变量:
// 控制器部分代码 public function edit($id) { $role = Role::findById($id); $permissions = Permission::all(); return view('admin_roles_edit', compact('role','permissions')); }
2. 修复HTML表单逻辑
修改多选框name属性和选中判断规则:
<div class="form-group has-feedback"> <label class="control-label col-lg-3">Permisos<span class="text-danger">*</span></label> <div class="multi-select-full"> <!-- 调整name属性为后端接收的参数名,多选场景添加[]标识为数组 --> <select class="multiselect" multiple="multiple" name="permissions[]"> @foreach($permissions as $permission) <!-- 调用Spatie权限包自带的集合contains方法,判断当前权限是否属于角色 --> <option value="{{$permission->id}}" @if($role->permissions->contains('id', $permission->id)) selected @endif> {{$permission->name}} </option> @endforeach </select> </div> </div>
额外说明
如果你用的是前端多选插件(比如Bootstrap Multiselect、Select2),修改完DOM后需要调用一次插件的刷新方法重新渲染,比如$('.multiselect').multiselect('refresh'),避免插件未识别到选中属性。
内容的提问来源于stack exchange,提问作者Johan
相关产品推荐
相关产品推荐

