如何从symfony 2中的视图层访问安全上下文令牌?

时间:2011-09-07 22:37:22

标签: symfony

如果我在会话中存储了一个用户对象,我可以使用以下内容检索用户名:

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

但我的用户对象(UserInterface)位于安全上下文中,更具体地说,位于userToken(TokenInterface)对象的用户字段中。如何从twig访问用户对象内的值?我正在考虑以下几点:

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

3 个答案:

答案 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 %}