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

Is there a way to retrieve the required roles of the current page with twig?

我有一个 <aside> 块显示广告,因为你可能知道广告公司不允许你在私人环境中显示这些广告,比如你需要验证的地方,所以我正在寻找一个聪明的方法来禁用那些需要用户身份验证的页面中的广告。

此外,我真的不喜欢在用户在线或不在线的情况下包含两个不同文件的想法,而且几乎可以肯定有一个内联解决方案来求解这个方程。那么有没有办法如果 "current" 页面需要给定角色,则通过 twig 禁用项目,在我的例子中是 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() 的功能,但如果我这样做,如果用户通过身份验证,所有页面上的广告都将被禁用,即使是那些不需要身份验证的用户,这显然不是希望的行为。

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

您应该创建 spearate 动作来呈现您的 aside 块。在此操作中,您应该检查用户是否已通过身份验证和其他内容。 如果用户通过身份验证,只需 return new Response() 否则 return 您呈现的视图。 然后在你的树枝模板中做

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

您可以使用请求属性。

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

login_page:
    path: /login
    defaults:
        hide_ads: true

然后你可以在你的模板中使用它 {% if !app.request.attributes.has('hide_ads') %}