【问题标题】:How to pass user informations to a template using Symfony2 and FosUserBundle如何使用 Symfony2 和 FosUserBundle 将用户信息传递给模板
【发布时间】:2014-10-23 08:32:21
【问题描述】:

我正在使用 symfony2,我安装了 FosUserBundle 并创建了一个捆绑包 UserBundle,如 FosUserBundle 在线文档中所示。到目前为止,一切都很好。 我还创建了另一个控制器,我可以通过这种方式访问​​记录的用户信息:

$user = $this->container->get('security.context')->getToken()->getUser();

现在想象一下,在我的网站中,对于所有页面/控制器,我需要显示一些用户信息,甚至在页面顶部显示一个简单的“Welcome MyUser”(因此在 base.html.twig 中)。我不想在所有控制器中复制上面的行,那么在哪里获取这些信息并将它们传递给基本模板的最佳位置是哪里?

【问题讨论】:

    标签: symfony fosuserbundle


    【解决方案1】:

    对于您给出的示例,“Welcome MyUser”,您可以使用

    在 twig 模板中获取此 var
     {% if is_granted("ROLE") %}
        Hi {{ app.user.username }}
    {% endif %}
    

    这是,如果你不需要逻辑

    另外,如果你不知道它,你可以在 twig 中使用遗产,这样你就可以创建一个带有这个 fosuser var 的 navbar.html.twig,然后在你的所有模板中这样做

    {% extends "AcmeMyBundle::navbar.html.twig" %}
    {% block body %}
       ....
    {% endblock %}
    

    【讨论】:

    • 非常感谢。如果我需要逻辑怎么办?例如,如果在同一个地方我需要显示未读电子邮件的数量......
    • 哈。那你和我的情况一样。我为它创建了一个服务,但我仍然需要在每个控制器中调用该服务,因为你不能做控制器继承,而只能做模板继承。我很高兴听到解决方案,但 imo 不可能。
    • 您可以做的一个技巧是将未读电子邮件的数量存储在用户实体中,然后在 twig 中执行 {{ app.user.unreadEmail }}
    猜你喜欢
    • 2011-09-16
    • 2014-05-02
    • 2016-01-01
    • 2019-02-07
    • 2011-07-14
    • 2021-12-03
    • 1970-01-01
    • 2011-06-09
    • 1970-01-01
    相关资源
    最近更新 更多