Используйте Javascript для доступа к переменной, переданной через Twig

41

У меня есть контроллер, который передает массив в шаблон ветки, который я хочу использовать в script, написанном на этой странице. Как мне это сделать?

Я пробовал это в своем шаблоне .twig:

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

но это работает только если это строка.

  • 1
    Добавление текущих результатов и ожидаемых результатов к вашему вопросу может значительно облегчить поиск решения.
Теги:
twig

4 ответа

155
Лучший ответ

Возможно, вам придется json_encode массива, попробуйте это:

<script>
    $(document).ready(function(){
        var test = {{ testArray|json_encode|raw }};
    });
</script>
  • 3
    Это решило мою проблему, спасибо!
  • 4
    Любые предложения, как сделать то же самое с массивом объектов?
Показать ещё 6 комментариев
9

Сначала отправьте данные json, закодированные с контроллера, и

затем в javascript,

var context= JSON.parse('{{ YourArrayFromController|raw}}');
  • 0
    это был тот для меня :)
  • 0
    Этот код небезопасен (XSS)
Показать ещё 1 комментарий
0

Я делаю это так:

Возврат контроллера test.data тогда

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

Twig:

<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"]

документация здесь

0

В моем контроллере я устанавливаю 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));

И в моем файле Twig

<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>

Ещё вопросы

Сообщество Overcoder
Наверх
Меню