97

我正在使用 FOSuserbundle 开始用户注册https://github.com/FriendsOfSymfony/FOSUserBundle

我已经注册/登录和退出。我现在要做的是获取登录的用户数据并将其显示在我网站的每个页面上。就像标题类型中的“嗨用户名”一样。

似乎在我的app/Resources/views/base.html.twig中嵌入控制器是执行此操作的最佳方法http://symfony.com/doc/current/book/templating.html#embedding-controllers

所以我写了我的控制器来访问用户配置文件数据。我想不通的是如何在我的嵌入式控制器中访问 FOS 方法。所以从我的Acme/UserBundle/Controller/UserController.php我想这样做:

public function showAction()
{
    $user = $this->container->get('security.context')->getToken()->getUser();
    if (!is_object($user) || !$user instanceof UserInterface) {
        throw new AccessDeniedException(
               'This user does not have access to this section.');
    }

    return $this->container->get('templating')
      ->renderResponse('FOSUserBundle:Profile:show.html.'.$this->container
      ->getParameter('fos_user.template.engine'), array('user' => $user));
}

我从中获取:vendor/bundles/FOS/UserBundle/Controller/ProfileController.php

4

3 回答 3

232

您可以直接在 twig 模板中访问用户数据,而无需在控制器中请求任何内容。用户可以这样访问:app.user

现在,您可以访问用户的每个属性。例如,您可以访问这样的用户名 : app.user.username

警告,如果用户未登录,app.user则为空。

如果要检查用户是否登录,可以使用is_grantedtwig 函数。例如,如果您想检查用户是否有ROLE_ADMIN,您只需要做is_granted("ROLE_ADMIN").

因此,在您的每个页面中,您都可以执行以下操作:

{% if is_granted("ROLE") %}
    Hi {{ app.user.username }}
{% endif %}
于 2011-09-19T11:24:09.170 回答
18

对于 symfony 2.6 及更高版本,我们可以使用

{{ app.user.getFirstname() }}

因为Twig 模板的app.security全局变量已被弃用,将从 3.0 中删除

更多信息:

http://symfony.com/blog/new-in-symfony-2-6-security-component-improvements

并查看全局变量

http://symfony.com/doc/current/reference/twig_reference.html

于 2015-09-22T14:02:05.640 回答
-1
{{ app.user.username|default('') }}

例如,只需提供登录用户名,过滤功能 default('') 应该在用户未登录时很好,以避免烦人的错误消息。

于 2016-07-26T01:21:09.947 回答