【问题标题】:how to return a view with array variable from laravel controller如何从 laravel 控制器返回带有数组变量的视图
【发布时间】:2018-05-24 04:29:32
【问题描述】:

在控制器中我有这个变量

$_colors = ['dummy1','dummy2','dummy3'];

我使用此代码返回视图

return view('view')->with(['colors'=>$_colors]);

在 page.blade.php 中,我尝试在标签中捕获变量

<script>
     var colors = "{{$colors}}";
</script>

不幸的是,它会引发错误:

htmlspecialchars() 期望参数 1 是字符串,给定数组

【问题讨论】:

    标签: php laravel laravel-5 laravel-blade


    【解决方案1】:

    你可以试试

    <script>
         var colors = JSON.parse('{!! json_encode($colors, true) !!}');
    </script>
    

    它将您的 PHP 数组编码为 JSON 字符串,然后在 JavaScript 代码中解码此字符串。

    你也可以试试。

    <script>
         var colors = JSON.parse('{!! $colors !!}');
    </script>
    

    【讨论】:

    • 我认为你也需要JSON.parse()。所以也许试试var colors = JSON.parse('{!! json_encode($colors, true) !!}');
    • 谢谢 - 工作,我会在 10 分钟内接受你的回答
    【解决方案2】:

    这是因为您分配给$colors$_colors 是一个数组。当您将它放在视图中的 javascript 代码中时,将其打印为 json 字符串是合理的:

    <script>
        var colors = {!! json_encode($colors) !!};
    </script>
    

    【讨论】:

    • 我没有足够的声誉来评论上面的答案,但在上面的那个例子中你需要 JSON.parse() 因为来自 php 的 json 编码字符串放在引号之间,什么使其成为字符串而不是 json 对象。所以我认为当你错过引号时它应该在没有 JSON.parse() 的情况下工作。
    • 哦,我忘了用{!! !!}代替{{ }},所以在打印来自json_encode()的字符串时不会使用htmlspecialchars()。我编辑了答案。
    猜你喜欢
    • 2018-01-06
    • 2015-10-15
    • 2020-11-06
    • 1970-01-01
    • 1970-01-01
    • 2021-09-23
    • 1970-01-01
    • 2020-05-07
    • 1970-01-01
    相关资源
    最近更新 更多