Доступ к зарегистрированному пользователю в шаблоне
Я использую 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('') }}
Просто введите имя пользователя для входа, например, функция фильтра по умолчанию ('') должна быть приятной, когда пользователь НЕ регистрируется, просто избегая раздражающего сообщения об ошибке.