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

76

Я использую 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

Теги:
twig
fosuserbundle

3 ответа

193
Лучший ответ

Вы можете получить доступ к пользовательским данным непосредственно в шаблоне ветки, не запрашивая ничего в контроллере. Пользователь доступен следующим образом: 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 %}
  • 8
    Благодарю. Я на самом деле изменил «ROLE» для «IS_AUTHENTICATED_REMEMBERED», и он работал отлично.
  • 5
    Я не использую FOSuserbundle (если только он не входит в app.user.username ), но app.user.username все еще работает для меня. Может быть полезно знать кому-то.
Показать ещё 3 комментария
12

Для 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

  • 4
    ненужный вызов метода. Вы можете использовать динамические атрибуты, такие как {{ app.user.firstname }} . Я думаю, он более дружественен перед разработчиками.
  • 2
    Несмотря на то, что я согласен с комментарием выше о ненужности, я собираюсь поддержать это, потому что он демонстрирует, что при желании можно использовать пользовательские методы
-2
{{ app.user.username|default('') }}

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

  • 2
    и как это решает проблему? Возможно, вам нужно добавить объяснение

Ещё вопросы

Сообщество Overcoder
Наверх
Меню