Как я могу получить доступ к токенам контекста безопасности из слоя представления в 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 %}