【问题标题】:Return a DTO instead of a User entity返回 DTO 而不是 User 实体
【发布时间】:2016-11-08 06:56:58
【问题描述】:

我将 Symfony 与 Twig 一起使用。在 Twig 中,我可以访问 app.user 变量。此变量返回登录用户的自定义用户实体。

虽然这很好,但我想返回用户实体的已解析 DTO。这是因为用户实体与其他实体的关系数量。没错,我需要登录用户的每个页面上的这些数据,但它也会将用户实体变成一个大对象。

在 Twig 中调用 app.user 时有没有办法返回解析后的 DTO?

【问题讨论】:

    标签: entity-framework symfony twig


    【解决方案1】:

    基本上,Doctrine 关系应该是延迟加载的(=只有在你使用这些属性时才加载)。

    请看这里:http://doctrine-orm.readthedocs.io/projects/doctrine-orm/en/latest/reference/working-with-objects.html#entity-object-graph-traversal

    所以你不能通过避免关系被水合来优化它,因为它已经是默认行为了。

    为了水合关系,您可以使用 fetch="EAGER" 对其进行配置

    【讨论】:

    • 我知道如果你不在每个页面上都使用这些属性,它们应该是延迟加载的。但是,在这个项目中,应该始终加载这些属性,因为它们总是被使用。我的问题是我是否可以让 app.user 返回 DTO 而不是实体。
    • 好的,不,你不能,但你可以编写自己的 Twig 扩展来扩展你的 DTO 并自己创建它。
    • 我没想到,谢谢你的建议。
    • 您还可以编辑您的用户关系以使用 fetch="EAGER" 进行设置
    猜你喜欢
    • 2021-04-20
    • 2020-12-28
    • 2022-01-12
    • 2019-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-01
    • 1970-01-01
    相关资源
    最近更新 更多