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

时间:2012-12-18 08:06:07

标签: php javascript symfony twig

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

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

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

但只有当它是一个字符串时才有效。

4 个答案:

答案 0 :(得分:159)

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

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

答案 1 :(得分:9)

首先,发送从控制器和

编码的数据json

然后在javascript中,

var context= JSON.parse('{{ YourArrayFromController|raw}}');

答案 2 :(得分:2)

我是这样做的:

返回控制器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"]

documentation here

答案 3 :(得分:1)

在我的控制器中,我安装了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>