首页 > 解决方案 > 如何使用 JSON 将数组从 Twig 传递到 Javascript

问题描述

我需要你的帮助来创造奇迹。

我想将 Twig 数组转换为 Javascript 数组,然后在循环中使用它并为 Google API 创建标记。

<script>
    var map, marker, i, e;
    var companies = {{ companies.items | json_encode() | raw }};

    console.log(companies);
    var address = {{ search.city.first.name | json_encode() | raw }};

    function initMap() {
        var geocoder = new google.maps.Geocoder();

        map = new google.maps.Map(document.getElementById('map'), {
            center: {lat: 44.8333, lng: -0.5667},
            zoom: 12,
            disableDefaultUI: true
        });

        //for (i = 0; i < locations.length; i++) {
            //marker = new google.maps.Marker({
                //position: new google.maps.LatLng(locations[i][1], locations[i][2]),
                //map: map
            //});

    }
</script>
<script src="https://maps.googleapis.com/maps/api/js?key=APIKEYLOL&callback=initMap"></script>

当我拿回我的阵列时,公司会向我展示一个空阵列。

console.log(companies) 的空数组画面

但是当我把它倒在树枝上时,我的数组还可以..

Twig 上的转储数组

有人能帮我吗?

标签: javascriptarrayssymfonytwigsymfony4

解决方案


json_encode默认情况下,将通过输出所有公共(即可访问)属性来序列化对象。由于您的对象没有公共属性,因此序列化是空的。你可以实现JsonSerializable接口。(恕我直言,最简单的解决方案)

还有其他更复杂的方法可以实现这一点。如果 json 序列化会因上下文而有所不同,它们就会变得相关......替代方案是实现一个 twig 函数,该函数将从您的对象中获取某些字段,编写一个适当的序列化程序或在您的对象上实现函数,这些函数根据上下文公开适当的序列化.


推荐阅读