Как я могу получить доступ к токенам контекста безопасности из слоя представления в symfony 2?
Если у меня был пользовательский объект, сохраненный в сеансе, я мог бы получить имя пользователя в twig, используя somthing like:
app.session.get('user').UserName
Но мой пользовательский объект (UserInterface
) находится в контексте безопасности, более конкретно в поле пользователя объекта userToken (TokenInterface). Как я могу получить доступ к значениям внутри пользовательского объекта из ветки? Я думаю о чем-то вроде:
app.security.context.token.user.[my_user_property]
Ответы
Ответ 1
Контекст безопасности доступен из app
global как security
:
{{ app.security.getToken().getUser() }}
выводит строковое представление вашего пользовательского объекта (или "anon.", если вы не вошли в систему, но аутентифицированы).
Обратите внимание, что если вы не объявили публичные свойства, вам придется использовать методы getter/setter:
{{ app.security.getToken().getUser().getUsername() }}
В качестве ярлыка вы можете использовать тег set
для определения пользовательской переменной в шаблоне:
{% set user = app.security.getToken().getUser() %}
и сохраните много ввода или передайте его с контроллера.
Ответ 2
В нашем проекте мы используем app object
. Это a Symfony\Bundle\FrameworkBundle\Templating\GlobalVariables
Этот объект имеет метод getUser
для доступа к пользователю в контексте безопасности.
Итак, в вашем коде вы можете использовать
{{ app.user.username }}
чтобы получить пользователя в ваших представлениях.
Ответ 3
Просто примечание. В Twig есть функция, в которой вы можете проверить, имеет ли пользователь заданную роль на уровне представления:
{% if is_granted('ROLE_USER') %}
<a href="...">Delete</a>
{% endif %}