Доступ к зарегистрированному пользователю в шаблоне - PullRequest
92 голосов
/ 18 сентября 2011

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

из которого я взял: продавец / жгуты / FOS / UserBundle / Controller / ProfileController.php

Ответы [ 3 ]

227 голосов
/ 19 сентября 2011

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

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

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

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

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

{% if is_granted("ROLE") %}
    Hi {{ app.user.username }}
{% endif %}
13 голосов
/ 22 сентября 2015

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

0 голосов
/ 26 июля 2016
{{ app.user.username|default('') }}

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

...