gpt4 book ai didi

javascript - Twig json_encode 与实体对象和集合(Symfony3)

转载 作者:行者123 更新时间:2023-11-28 10:46:25 26 4
gpt4 key购买 nike

从我的 Controller 中,我将一个名为 Tag实体数组传递到 twig 文件,如下所示:

return $this->render('tags/list.html.twig', array(
'tags' => $tags,
));

然后,我使用 Twig for 在 HTML 中显示每个标签。每个Tag都有一个实体Texts(多种语言)的集合。我想将 Texts 集合传递给 JS,用 jQuery 进行一些处理。

{% for tag in tags %}
{% if tag.texts|default %}
<div data-tag-texts="{{ tag.texts|json_encode }}">...</div>
{% endif %}

...
{% endfor %}

但它在 JS 中返回一个空对象:Object {},而我的文本集合不为空。通常,文本是对象的对象。

我尝试了很多方法,但结果相同:

{{ tag.texts|json_encode }}
{{ tag.texts|json_encode(constant('JSON_PRETTY_PRINT'))|raw }}

我想浏览文本以便在语言选项卡中向所有人显示。所有这一切都在 Boostrap Modal 中。所以,我必须获取 JavaScript 中的文本。

感谢您的帮助。

最佳答案

感谢@Matteo的想法,我安装了Serializer Component Symfony 的(而不是实现\JsonSerialized 接口(interface))。

在我的 Tag 实体中,我添加了:

use Symfony\Component\Serializer\Serializer;
use Symfony\Component\Serializer\Encoder\JsonEncoder;
use Symfony\Component\Serializer\Normalizer\ObjectNormalizer;

public function serializer() {
$encoder = new JsonEncoder();

$normalizer = new ObjectNormalizer();
$normalizer->setIgnoredAttributes(array(
'typeCode', 'type', 'range',
'useCaseCode', 'useCase', 'updatedAt', 'updatedBy'));

$normalizer->setCircularReferenceHandler(function ($object) {
return $object->getName();
});

$serializer = new Serializer(array($normalizer), array($encoder));
return $serializer->serialize($this, 'json');
}

这非常有用,因为我们可以选择属性并且我们有实体关系。

在我的 Twig 文件中:

<div data-tag="{{ tag.serializer }}">...</div>

在 JS 中,我有我的标签对象。文本是对象数组。一切都很顺利!

注意:请注意您的 Symfony 版本。我的版本是 3.0.9,无法安装序列化器组件。我必须将 Symfony 更新到 3.2 才能使其正常工作。

关于javascript - Twig json_encode 与实体对象和集合(Symfony3),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41933455/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com