Laravel获取用户勾选权限ID:格式转换问题求助
解决Laravel表单提交权限ID数组格式问题
看起来你遇到的问题是表单提交后,permission参数变成了以权限ID为键、'on'为值的关联数组,但你需要的是纯ID组成的索引数组对吧?我来帮你搞定这个问题~
问题原因
之所以会出现{"1": "on", "2": "on"...}这种格式,是因为你在HTML的checkbox标签里把name属性设成了permission[{{$sub_menu->id}}]——浏览器提交表单时,会把每个勾选的checkbox解析成「键为括号里的ID,值为默认的'on'」的键值对,最终组合成关联数组。
解决方案
这里提供两种思路,你可以根据自己的情况选择:
方案1:修改前端HTML(推荐,更符合表单提交的常规逻辑)
把checkbox的name属性改成permission[],同时给每个checkbox设置value为对应的权限ID。这样浏览器会自动把选中的checkbox的value值收集成一个索引数组提交。
修改后的父菜单checkbox代码:
<input id="{{$sub_menu->name}}" name="permission[]" type="checkbox" value="{{$sub_menu->id}}" class="parent intermediate parent-{{$menu->id}} parentmenu-{{$sub_menu->id}}" data-id="{{$menu->id}}" data-sub="{{$sub_menu->id}}" >
子菜单的checkbox也要做同样修改:
<input id="checkbox{{$permission->id}}" name="permission[]" type="checkbox" value="{{$permission->id}}" class="child parent-{{$menu->id}}" data-parent-id="{{$menu->id}}" >
修改后再提交表单,request()->all()返回的permission就会是你期望的[1,2,3,...]格式了。
方案2:后端处理请求数据(适合不想改动前端的场景)
如果已经上线不想调整前端代码,可以在Laravel控制器里对请求数据做转换——提取permission关联数组的键(也就是权限ID),组成新的索引数组:
// 获取所有请求数据 $input = request()->all(); // 处理permission字段 if (isset($input['permission'])) { // 提取关联数组的键,得到权限ID数组 $input['permission'] = array_keys($input['permission']); // 可选:把ID转换成整数类型(确保数据类型正确) $input['permission'] = array_map('intval', $input['permission']); } // 现在$input就是你需要的格式了 dd($input); // 可以打印看看结果
这样处理后,$input['permission']就变成了纯ID的索引数组,和你期望的格式一致。
内容的提问来源于stack exchange,提问作者zubair malik
相关产品推荐
相关产品推荐

