Преобразование объекта объекта PHP Symfony2 для использования в Javascript

Я пытаюсь открыть данные из объекта PHP (как показано ниже), но я хотел бы иметь доступ к этим данным в JavaScript для использования в графической библиотеке.

Объект, о котором идет речь:

http://puu.sh/eP3QZ/e4289eb0d8.png

То, что мне нужно, это преобразовать его в JSON-закодированный объект для использования в Javascript.

Я попытался использовать twig в Symfony, чтобы сделать это через:

{% set playerStats = match.getStatsPlayers().getValues() }% {% dump(playerStats) %} // This is what you see above var playerStats = {{ playerStats|json_encode }}; console.log(playerStats); 

Консоль показывает это:

http://puu.sh/eP4aX/adf6c9978f.png

Вот где я стучу головой о стену. Где я могу получить доступ к значениям этих свойств?

Как неэффективный способ, мне удалось получить его в объекте JavaScript, выполнив:

 {% for p in playerStats %} playerStats.push({ 'id': {{p.playerID}}, 'playerName': '{{p.playerName}}', 'playerOutfit': {{p.playerOutfit}}, 'playerFaction': {{p.playerFaction}}, 'playerKills': {{p.playerKills}}, 'playerDeaths': {{p.playerDeaths}}, 'playerTeamKills': {{p.playerTeamKills}}, 'playerSuicides': {{p.playerSuicides}} }); {% endfor %} 

Для этого я чувствую себя грязно. Должен быть лучший способ сделать это, конечно?

Заранее спасибо!

Related of "Преобразование объекта объекта PHP Symfony2 для использования в Javascript"

Вы можете использовать Symfony Serializer. http://symfony.com/doc/current/components/serializer.html

Возможно, вы захотите написать собственное расширение Twig, чтобы сделать это из своего шаблона.

Ваш код будет выглядеть примерно так:

 use Symfony\Component\Serializer\Serializer; use Symfony\Component\Serializer\Encoder\JsonEncoder; use Symfony\Component\Serializer\Normalizer\GetSetMethodNormalizer; $encoders = array(new JsonEncoder()); $normalizers = array(new GetSetMethodNormalizer()); $serializer = new Serializer($normalizers, $encoders); $jsonContent = $serializer->serialize($object, 'json'); 

Когда вы вставляете эту строку в свой javascript, у вас должен быть обычный объект JS, где вы можете найти все, что хотите.

Возможно, вы захотите использовать JMSSerializerBundle, поскольку он уже имеет расширение Twig, и его проще использовать в целом.

https://github.com/schmittjoh/JMSSerializerBundle/blob/master/Resources/doc/index.rst


Обновление, чтобы дать краткий обзор того, что находится в комментариях.

Как Symfony Serializer, так и JMSSerializerBundle, похоже, трудно справиться с двунаправленными отношениями (скорее всего, с Доктриной). Это приведет к ошибкам, например, «Недостаточно памяти» или что-то, что касается объектов «Self-referencing» / бесконечных циклов.

Чтобы решить эту проблему, вы можете игнорировать атрибут с помощью Normalizer. Что будет выглядеть примерно так:

 use Symfony\Component\Serializer\Serializer; use Symfony\Component\Serializer\Encoder\JsonEncoder; use Symfony\Component\Serializer\Normalizer\GetSetMethodNormalizer; $normalizer = new GetSetMethodNormalizer(); $normalizer->setIgnoredAttributes(array('match')); //Replace match with the parent attribute $encoder = new JsonEncoder(); $serializer = new Serializer(array($normalizer), array($encoder)); $serializer->serialize($object, 'json');