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

如何将Laravel集合的Permission数组传入jQuery用于Select2组件?

解决Laravel集合转JS数组给Select2的引号转义问题

你遇到的问题核心是Blade模板的{{ }}语法会自动对HTML特殊字符做转义,把双引号转换成了",导致jQuery无法识别出正确的数组格式。这里有几个实用的解决办法:

方法一:直接输出未转义的JSON数组

把原来的{{ }}替换成{!! !!}(用于输出未转义的内容),同时将Laravel集合转为JSON格式:

$( document ).ready(function() {
    $("#role_select").select2();
    $('#role_select').val( {!! $user->roles->pluck('permission')->toJson() !!} ).trigger('change');
});

pluck('permission')会提取所有角色的permission字段形成集合,toJson()将集合转为JS能直接解析的JSON字符串,{!! !!}确保输出内容不被转义,最终就能得到["Super","Moderate"]这样原生的数组格式。

方法二:先转PHP数组再转JSON

如果你习惯先处理成PHP数组,也可以这么写:

$( document ).ready(function() {
    $("#role_select").select2();
    $('#role_select').val( {!! json_encode($user->roles->pluck('permission')->toArray()) !!} ).trigger('change');
});

集合的toArray()方法会把集合转为PHP数组,再用json_encode()转成JSON字符串,效果和方法一完全一致。

方法三:控制器提前处理(代码更清晰)

如果想让视图代码更简洁,建议在控制器中先处理好权限数组,再传递到视图:

// 控制器代码
$userPermissions = $user->roles->pluck('permission')->toArray();
return view('your-view-name', compact('userPermissions'));

然后在视图中直接使用:

$( document ).ready(function() {
    $("#role_select").select2();
    $('#role_select').val( {!! json_encode($userPermissions) !!} ).trigger('change');
});

注意事项

使用{!! !!}时要确保输出的内容是安全的(比如这里的permission字段是系统内部定义的,没有用户输入的恶意内容),避免XSS攻击风险。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:51:27