Захват с угловой объект ответа, отправленный методом render() в Symfony 2

Можно ли получить объект ответа, отправленный методом render()(Symfony2)?

Образец:

public function indexAction(){

      $params = array('Hi' =>'Hello world', 'userName' =>'Jack');

      return $this->render('exampleBundle:Default:index.html.twig', $params);
    }

Я полностью могу захватить var $paramsи его содержимое в html.twigфайле, но я не могу понять, как получить это содержимое в javascript для отображения представления с помощью angular. На всякий случай, я попробовал много абсурдных вещей, но они, очевидно, не сработали.

Возможно, это вообще невозможно, и мне нужно будет изменить его или сделать новый вызов ajax после загрузки документа вместо передачи содержимого с помощью render()метода. Я не уверен, что так, Могу ли я достичь этого без запроса ajax?

1 ответ

  1. Такой подход мне кажется плохим. Философия большинства современных клиентских приложений заключается в том, чтобы как можно скорее загрузить веб-страницу с сервера и загрузить данные через запрос xhr.

    Сказал, что если вам нужно или хотите сделать это, вы можете достичь этого разными способами:

    Я не пробовал примеры, поэтому это может содержать некоторые синтаксические ошибки:

    1-подход JS Vanilla; в вашем html.twig

    <script type="text/javascript">
        window.nameSpaceOfMyApp = window.nameSpaceOfMyApp || {};
        window.nameSpaceOfMyApp.exchange = window.nameSpaceOfMyApp.exchange || {};
        window.nameSpaceOfMyApp.exchange.params = JSON.parse({{$params |json_encode()}});
    </script>
    

    2-больше «угловой путь» не перегружая глобальное пространство имен и лучшее тестирование…Если у вас есть нагрузка угловая.js на этом этапе вы можете создать в шаблоне twig основной модуль вашего углового приложения (если вы не можете использовать свой основной модуль, вы можете использовать новый модуль и требовать его в качестве зависимости вашего основного модуля)
    в вашем html.twig:

    <script type="text/javascript">
        angular.module('moduleName',[<dependencies>,...])
        .value('exchange',{
            params: JSON.parse({{$params |json_encode()}})
        })
    </script>
    

    Позже вы можете ввести это значение там, где оно вам нужно.

    angular.module('moduleName').controller('nameOfController',['exchange', function(exchange){
        console.log(exchange.params)
    }]);