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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:18:18