2013-03-07 96 views
1

我想在樹枝中的if條件中使用過濾器。原因是Symfony2屬性,我不能直接比較,我必須事先改變它。我已經開始使用此代碼:樹枝:在if條件中過濾

{% if app.request.attributes.get('_controller')|split('::')|first == 'some\controller\name' %} 
    do something 
{% endif %} 

不幸的是這不起作用。所以我以爲我會在比較之前用套裝:

{% set controller = app.request.attributes.get('_controller')|split('::')|first %} 
{% if controller == 'some\controller\name' %} 
    do something 
{% endif %} 
{{ controller }} {# would print 'some\controller\name' #} 

猜猜是什麼? 「做某事」不會被打印,即使變量控制器現在存在並且具有我與它比較的值。我究竟做錯了什麼?

+1

您在查看有太多的邏輯,我的邏輯移動到控制器。使視圖簡單,測試也更容易。 – 2013-03-07 22:39:11

+0

當我在視圖中可以有一個邏輯表達式時,我無法在控制器的每個動作中始終爲模板分配相同的值。這只是結束於容易出錯的重複... – bekay 2013-03-07 22:46:21

+0

它應該工作...你確定不要在你的網頁上使用緩存嗎? – Sybio 2013-03-07 22:46:45

回答

3

好的我測試了它,枝條有一種奇怪的行爲。 「\」被轉義或者類似的東西。 我伸出我用的var_dump功能樹枝environement,檢查:

{{ var_dump("Sybio\Bundle\WebsiteBundle\Controller\MainController") }} 
//string(48) "SybioBundleWebsiteBundleControllerMainController" 

{{ var_dump(app.request.attributes.get('_controller')|split('::')|first) }} 
// string(52) "Sybio\Bundle\WebsiteBundle\Controller\MainController" 

{{ var_dump("Sybio\\Bundle\\WebsiteBundle\\Controller\\MainController") }} 
// string(52) "Sybio\Bundle\WebsiteBundle\Controller\MainController" 

這就是爲什麼你的測試始終是假的。 你需要加倍反引號的比較字符串...

{% if app.request.attributes.get('_controller')|split('::')|first == 'some\\controller\\name' %} 
    do something 
{% endif %} 
+0

非常感謝,這解釋了它! – bekay 2013-03-07 23:03:09

+0

只需在Symfony中添加該小枝具有'dump()'內置的[以下是如何啓用它](http://symfony.com/doc/current/book/templating.html#debugging)。 – Maerlyn 2013-03-09 10:32:10