2013-03-07 64 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