如何使用Symfony2和FosUserBundle将用户信息传递到模板

如何使用Symfony2和FosUserBundle将用户信息传递到模板,symfony,fosuserbundle,Symfony,Fosuserbundle,我使用的是symfony2,我安装了FosUserBundle,并创建了一个bundle UserBundle,如FosUserBundle在线文档中所示。到现在为止,一直都还不错。 我还创建了另一个控制器,可以通过以下方式访问记录的用户信息: $user = $this->container->get('security.context')->getToken()->getUser(); 现在想象一下,在我的网站中,对于所有页面/控制器,我需要显示一些用户信息,甚至在

我使用的是symfony2,我安装了FosUserBundle,并创建了一个bundle UserBundle,如FosUserBundle在线文档中所示。到现在为止,一直都还不错。 我还创建了另一个控制器,可以通过以下方式访问记录的用户信息:

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

现在想象一下,在我的网站中,对于所有页面/控制器,我需要显示一些用户信息,甚至在base.html.twig页面顶部显示一个简单的欢迎我的用户。我不想在所有控制器中复制上面的行,因此,在哪里最好一次获取此信息并将其传递给基础模板?

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

 {% if is_granted("ROLE") %}
    Hi {{ app.user.username }}
{% endif %}
这是,如果你不需要逻辑的话

另外,如果您不知道,您可以在twig中使用heritage,这样您就可以创建一个navbar.html.twig,其中包含这个fosuser变量,然后在所有模板中使用它

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

好的,谢谢。如果我需要逻辑怎么办?例如,如果在同一个地方,我需要显示未读电子邮件的数量…哈。那你和我的情况一样。我为它创建了一个服务,但我仍然需要在每个控制器中调用该服务,因为您不能执行控制器传统,而只能执行模板传统。我很高兴听到一个解决方案,但我不可能。你可以做的一个技巧是将未读电子邮件的数量存储在用户实体中,然后存储在twig do{{app.user.unreadEmail}