使用 Javascript 访问通过 Twig 传递的变量

IT技术 php javascript symfony twig
2021-03-15 09:29:45

我有一个将数组传递给树枝模板的控制器,我想在该页面上编写的脚本中使用该模板。我该怎么做呢?

我在我的 .twig 模板中试过这个:

<script>
    $(document).ready(function(){
        var test = {{ testArray }};
});
</script>

但这仅在它是字符串时才有效。

4个回答

你可能需要json_encode数组,试试这个:

<script>
    $(document).ready(function(){
        var test = {{ testArray|json_encode|raw }};
    });
</script>
任何建议如何对一组对象执行相同操作?
2021-04-16 09:29:45
不要忘记添加引号 var test = '{{ testArray|json_encode|raw }}';
2021-05-01 09:29:45
不,你不想引用它。这将使变量成为包含 json 值的字符串。如果没有引号,它会被正确解析为数组对象。
2021-05-05 09:29:45
我遇到了这个问题,与传单库一起使用时,键顺序被颠倒了
2021-05-11 09:29:45

首先,发送从控制器编码的数据json和

然后在javascript中,

var context= JSON.parse('{{ YourArrayFromController|raw}}');
嗯,如果你的 JSON 中的一些值有单引号怎么办?{"message": "Can't process"}
2021-05-03 09:29:45
@JoséGabrielGonzález 你会怎么做?
2021-05-06 09:29:45

我这样做:

然后返回控制器 test.data

$test = array('data' => array('one','two'))

枝条:

<div id="test" data-is-test="{{ test.data|json_encode }}"></div>

JS:

$(document).ready(function() {
    var test = $('#test').data("isTest");
    console.log(test);
});

输出:

 ["one", "two"]

文档在这里

在我的控制器中,我安装了 SerializerBundle

$serializer = $this->get('serializer');
        $countries = $this->getDoctrine()->getRepository("QSCORBundle:CountryMaps")->findAll();
        $jsonCountries = $serializer->serialize($countries, 'json');
 return $this->render('QSCORBundle:Default:index.html.twig',array("countries"=> $jsonCountries));

在我的文件树枝中

<script type="text/javascript" >
 var obj = {{ countries|json_encode|raw }};
 var myObject = eval('(' + obj + ')');

 console.log(myObject[0]['capital_latitude'] + " " + myObject[0]['capital_longitude']);//for the First Element
</script>