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

标签 javascript json object twig symfony

从我的 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/

相关文章:

javascript - 从下拉列表中选择一个名称,或者如果不退出,可以在文本框中写入

JavaScript Array.map() 将逗号附加到 DOM

ajax - 使用 JsonRest Store (dojo) 自定义 http header

javascript - 重新排列 javascript 对象结构

PHP面向对象的酒店应用程序

javascript - 如何处理 jquery 数据表中的数据库空值

javascript - 为什么在异步函数中捕获后仍然抛出异常?

javascript - 如何以包含大约相同数量的男孩和女孩的方式将一些学生分成不同的组

python - Snakemake:基于 jsonschema 验证嵌套 yaml

javascript - 如何在 JSDoc 中将对象的值设置为类型