2015-07-20 38 views
1

我有一個顯示廣告的<aside>區塊,因爲您可能知道廣告公司不允許您在私密環境中顯示這些廣告,例如您需要進行身份驗證的地方,所以我一直在尋找一種智能方式來禁用這些廣告那些需要用戶認證的頁面。有沒有辦法用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()功能,但如果我這樣做,廣告將在所有的頁面,如果用戶進行身份驗證,即使是那些誰不requiere認證,這顯然是禁用不是希望的行爲。

回答

4

你可以使用請求屬性。

在你的路由配置,添加例如hide_ads屬性:

login_page: 
    path: /login 
    defaults: 
     hide_ads: true 

然後在你{% if !app.request.attributes.has('hide_ads') %}

模板,你可以用它
0

不是最佳答案,但是如果您使用access_control過濾需要驗證的頁面,則會嘗試將正則表達式與頁面路徑進行匹配。你可以嘗試在你的樹枝模板中使用這個相同的正則表達式。

0

你應該創建渲染你的邊框的特殊動作。在此操作中,您應該檢查用戶是否已通過身份驗證以及其他內容。 如果用戶通過身份驗證,則返回新的Response(),否則返回您的呈現視圖。 然後在你的樹枝模板中做

{% render(controller('AcmeBundle:Controller:Action')) %} 
相關問題