2

我想在 Twig 的 if 条件中使用过滤器。原因是Symfony2的一个属性,我不能直接比较,得提前改一下。我从这段代码开始:

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

不幸的是,这不起作用。所以我想我会在比较之前使用 set :

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

你猜怎么了?即使变量控制器现在存在并且具有我与之比较的值,也不会打印“做某事” 。我究竟做错了什么?

4

1 回答 1

3

好的,我测试了它,Twig 有一个奇怪的行为。“\”被转义或类似的东西。我用 var_dump 函数扩展了我的树枝环境,检查一下:

{{ 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 %}
于 2013-03-07T22:58:31.010 回答