转换Symfony2 PHP实体对象以在Javascript中使用

马特·卡瓦纳(Matt Cavanagh)

我正在尝试从PHP对象打开数据(如下所示),但我希望能够在JavaScript中访问此数据以在图形库中使用。

有问题的对象:

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

我需要做的就是将其转换为JSON编码的对象,以便在Javascript中使用。

我尝试在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 %}

我觉得这样做很脏。确定要有更好的方法吗?

提前致谢!

尼科·卡格(Nico Kaag)

您可以使用Symfony序列化器。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序列化程序和JMSSerializerBundle似乎都很难应付双向关系(很可能是教义)。这将导致错误,例如“内存不足”或提及“自引用”对象/无限循环的错误。

要解决此问题,可以使用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');

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

动态表单(开关实体)symfony2

来自分类Dev

Symfony2实体与列的关系

来自分类Dev

Symfony2从请求创建实体

来自分类Dev

Symfony2可重用实体

来自分类Dev

空的继承实体Symfony2

来自分类Dev

Symfony2:如何将“ Doctrine-> getRepository-> find”从实体转换为数组?

来自分类Dev

Symfony2:从集合中间删除实体

来自分类Dev

Symfony2学说实体未水合

来自分类Dev

symfony2可捕获的致命错误:类的对象无法转换为字符串

来自分类Dev

使用DataTransformer将实体中的Symfony2 base64转换为表格形式(和相反形式)的文件

来自分类Dev

使用Code2将CodeIgniter转换为Symfony2

来自分类Dev

Symfony2:向实体添加方法

来自分类Dev

无法更新实体Symfony2

来自分类Dev

Symfony2形式,与实体不匹配

来自分类Dev

具有CRUD的Symfony2实体

来自分类Dev

Symfony2在EntityRepository中使用参数

来自分类Dev

当referencedColumnName与“ id”不同时,在Symfony2中使用“解析目标实体”的实体之间的关系

来自分类Dev

Symfony2:无法将类DateTime的对象转换为字符串

来自分类Dev

Symfony2原始查询强制转换为实体

来自分类Dev

Symfony2关系实体+形式

来自分类Dev

时区php Symfony2

来自分类Dev

在DQL(Symfony2)中使用实体的方法

来自分类Dev

Symfony2 JavaScript网址

来自分类Dev

symfony2实体对象与整数崩溃

来自分类Dev

Doctrine2 + Symfony2:如何在Symfony2中使用命名空间的Doctrine实体?

来自分类Dev

使用DataTransformer将实体中的Symfony2 base64转换为表格形式(和相反形式)的文件

来自分类Dev

Symfony2:在(导入的)JavaScript中使用Twig变量

来自分类Dev

实体属性类型作为Symfony2中的对象

来自分类Dev

Symfony2 数据转换器字符串到实体 (reverseTransform)

Related 相关文章

热门标签

归档