【问题标题】:Laravel collection to javascript variableLaravel 集合到 javascript 变量
【发布时间】:2021-08-04 11:33:32
【问题描述】:

为什么 laravel 集合可以直接用作 javascript 变量而不是 php 数组或对象?

testing.blade.php

<?php
use Illuminate\Support\Collection;
$testingArray = [1,2,3];
$testingObject = new stdClass();
$testingObject->testing = "Testing";
$testingObject->hello = "Hello";
$testingObject->bye = "Bye";
$testingCollection = Collection::make($testingArray);
?>

<script>
        var myArray = {!! $testingArray !!}; //Not work 
        var myObject = {!! $testingObject !!}; //Not work 

        var myArray = {!! json_encode($testingArray) !!}; //Work
        var myObject = {!! json_encode($testingObject) !!}; //Work
        var myCollection = {!! $testingCollection !!}; //Work
</script>

有参考吗?

【问题讨论】:

  • {!! .. !!} 之间发生的是输出。 PHP 无法打印数组和对象,因为它没有任何关于如何将它们转换为字符串的说明。 Laravel Collection 对象可能已经实现了__toString 以允许转换。
  • 还有here it is,它指向this trait it's using
  • 别忘了@json 指令!

标签: javascript php laravel


【解决方案1】:

这是因为Collection 对象在您将它们转换为字符串时会自动序列化为 JSON。

https://laravel.com/docs/8.x/eloquent-serialization#serializing-to-json

模型和集合在转换为字符串时会转换为 JSON

你展示的这段代码:

{!! $testingCollection !!}

尝试将$testingCollection 输出到视图。这样做显然需要把它变成一个字符串。根据文档,这将自动触发其 JSON 序列化。

这是通过其标准的 __toString() 函数发生的,该函数然后指向一个调用 toJSON() 来执行序列化的特征。

这反过来意味着 JavaScript 可以立即读取它,因为您可能知道,有效的 JSON 可以用作 JavaScript 对象字面量(因为 JSON 语法是 JS 对象语法的子集)。

【讨论】:

    猜你喜欢
    • 2018-07-06
    • 2020-09-04
    • 2021-09-09
    • 1970-01-01
    • 2015-11-24
    • 2016-09-18
    • 2020-07-06
    • 2021-08-19
    • 2021-07-12
    相关资源
    最近更新 更多