有没有办法用树枝检索当前页面所需的角色?

时间:2015-07-20 17:12:49

标签: php symfony twig

我有一个显示广告的<aside>区块,因为您可能知道广告公司不允许您在私有环境中显示这些广告,例如您需要进行身份验证的地方,因此我一直在寻找在需要用户身份验证的页面中禁用这些广告的智能方法。

另外,如果用户在线或不在线,我真的不喜欢有两个不同的文件包含,并且几乎可以肯定有一个内联解决方案来解决这个等式。那么有没有办法如果&#34;当前&#34;通过树枝禁用项目页面需要一个给定的角色,在我的例子中是ROLE_USER及以上,例如

<aside>
{% if not is_required('ROLE_USER') %} <-------- if the role ROLE_USER is not requiered -->
    <section id="my-ad">
    </section>
{% endif %}
    ...
</aside>

我知道有一个名为is_granted()的功能,但如果我这样做,如果用户经过身份验证,即使是那些不需要身份验证的人,也会在所有网页上停用广告,显然不是希望的行为。

3 个答案:

答案 0 :(得分:4)

您可以使用请求属性。

在路由配置中,添加例如hide_ads属性:

login_page:
    path: /login
    defaults:
        hide_ads: true

然后,您可以使用{% if !app.request.attributes.has('hide_ads') %}

在模板中使用它

答案 1 :(得分:0)

不是最佳答案,但如果您使用access_control过滤需要身份验证的网页,则会尝试将正则表达式与网页路径相匹配。您可以尝试在树枝模板中使用相同的正则表达式。

答案 2 :(得分:0)

你应该创建一个特殊的动作来渲染你的一边。在此操作中,您应该检查用户是否经过身份验证和其他内容。 如果用户已通过身份验证,则返回新的Response(),否则返回渲染的视图。 然后在你的树枝模板中做

{% render(controller('AcmeBundle:Controller:Action')) %}