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