如果我在会话中存储了一个用户对象,我可以使用以下内容检索用户名:
app.session.get('user').UserName
但我的用户对象(UserInterface
)位于安全上下文中,更具体地说,位于userToken(TokenInterface)对象的用户字段中。如何从twig访问用户对象内的值?我正在考虑以下几点:
app.security.context.token.user.[my_user_property]
答案 0 :(得分:23)
安全上下文可从app
全局security
获取:
{{ app.security.getToken().getUser() }}
将输出用户对象的字符串表示形式(或“anon。”,如果您尚未登录,但已通过身份验证)。
请注意,除非您已声明公共属性,否则您必须使用getter / setter方法:
{{ app.security.getToken().getUser().getUsername() }}
作为一种快捷方式,您可以使用set
标记在模板中定义用户变量:
{% set user = app.security.getToken().getUser() %}
并节省大量的输入,或者从控制器中传入。
答案 1 :(得分:20)
在我们的项目中,我们使用app object
。这是一个Symfony\Bundle\FrameworkBundle\Templating\GlobalVariables
此对象具有方法getUser
以在安全上下文中访问用户。
因此,在您的代码中,您可以使用
{{ app.user.username }}
在视图中检索用户。
答案 2 :(得分:14)
只需注意,Twig有一个功能,您可以从视图层检查用户是否具有给定角色:
{% if is_granted('ROLE_USER') %}
<a href="...">Delete</a>
{% endif %}