Доступ к зарегистрированному пользователю в шаблоне

Я использую FOSuserbundle для начала регистрации пользователя https://github.com/FriendsOfSymfony/FOSUserBundle

У меня есть регистрация/вход в систему и выход. Теперь я хочу захватить зарегистрированные данные пользователей и представить их на каждой странице моего сайта. Как "Привет имя пользователя" в типе заголовка.

Кажется, что вложение контроллера в мое приложение /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));
}

с которого я схватил: поставщик/пучки/ФОС/UserBundle/контроллер/ProfileController.php

Ответ 1

Вы можете получить доступ к пользовательским данным непосредственно в шаблоне ветки, не запрашивая ничего в контроллере. Пользователь доступен следующим образом: app.user.

Теперь вы можете получить доступ ко всем свойствам пользователя. Например, вы можете получить доступ к этому имени: app.user.username.

Предупреждение, если пользователь не зарегистрирован, app.user имеет значение null.

Если вы хотите проверить, зарегистрирован ли пользователь, вы можете использовать функцию is_granted twig. Например, если вы хотите проверить, есть ли у пользователя ROLE_ADMIN, вам просто нужно сделать is_granted("ROLE_ADMIN").

Итак, на каждой из ваших страниц вы можете:

{% if is_granted("ROLE") %}
    Hi {{ app.user.username }}
{% endif %}

Ответ 2

Для symfony 2.6 и выше мы можем использовать

{{ app.user.getFirstname() }}

поскольку глобальная переменная app.security для шаблона Twig устарела и будет удалена из 3.0

Дополнительная информация:

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

и увидеть глобальные переменные в

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

Ответ 3

{{ app.user.username|default('') }}

Просто введите имя пользователя для входа, например, функция фильтра по умолчанию ('') должна быть приятной, когда пользователь НЕ регистрируется, просто избегая раздражающего сообщения об ошибке.