具有实体对象和集合的Twig json_encode(Symfony3)

时间:2017-01-30 10:19:05

标签: javascript json object twig symfony

从我的控制器中,我将名为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获取文本。

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

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

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

 $("#Location1").on('change', function()

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

在我的Twig文件中:

Tag

在JS中,我有标记对象。文本是对象数组。一切都很好!

注意:请注意您的Symfony版本。我是3.0.9,我无法安装Serializer组件。我不得不将Symfony更新为3.2以使其正常工作。

答案 1 :(得分:-1)

https://twigfiddle.com/ntexhi

基本文本看起来不错。我认为你必须有非UTF-8字符,这会破坏你的编码,从而返回null JSON。在将数据发送到Twig之前尝试utf8_encode