Как я могу получить доступ к токену контекста безопасности из уровня представления в Symfony 2? - PullRequest
15 голосов
/ 08 сентября 2011

Если бы в сеансе был сохранен объект пользователя, я мог бы получить имя пользователя в ветке, используя что-то вроде:

app.session.get('user').UserName

Но мой объект пользователя (UserInterface) находится в контексте безопасностиболее конкретно в пользовательском поле объекта userToken (TokenInterface).Как я могу получить доступ к значениям внутри объекта пользователя из ветки?Я думаю о чем-то вроде:

app.security.context.token.user.[my_user_property]

Ответы [ 3 ]

23 голосов
/ 08 сентября 2011

Контекст безопасности доступен из app global как security:

{{ app.security.getToken().getUser() }}

выведет строковое представление вашего пользовательского объекта (или «anon.», Если вы не вошли в систему)., но проходят проверку подлинности).

Обратите внимание, что если вы не объявили открытые свойства, вам придется использовать методы получения / установки:

{{ app.security.getToken().getUser().getUsername() }}

В качестве ярлыка вы можете использовать set тег для определения пользовательской переменной в шаблоне:

{% set user = app.security.getToken().getUser() %}

и избавьте себя от необходимости много печатать или передавать его из контроллера.

20 голосов
/ 08 сентября 2011

В нашем проекте мы используем app object.Это Symfony\Bundle\FrameworkBundle\Templating\GlobalVariables

Этот объект имеет метод getUser для доступа к пользователю в контексте безопасности.

Так что в вашем коде вы можете использовать

{{ app.user.username }} 

чтобы получить пользователя в ваших представлениях.

14 голосов
/ 26 октября 2011

Просто примечание, Twig имеет функцию, с помощью которой вы можете проверить, есть ли у пользователя заданная роль из слоя представления:

{% if is_granted('ROLE_USER') %}
    <a href="...">Delete</a>
{% endif %}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...