2

Twigのif条件でフィルターを使いたいです。この理由は Symfony2 の属性で、直接比較することはできません。事前に変更する必要があります。私はこのコードから始めました:

{% 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' #}

何だと思う?変数コントローラーが存在し、比較する値を持っていても、「何かをする」は出力されません。私は何を間違っていますか?

4

1 に答える 1

3

わかりましたテストしましたが、Twig には奇妙な動作があります。「\」はエスケープされているか、このようなものです。var_dump 関数を使用して twig 環境を拡張しました。これを確認してください。

{{ 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"

そのため、テストは常に false です。比較する文字列のバックスラッシュを 2 倍にする必要があります...

{% if app.request.attributes.get('_controller')|split('::')|first == 'some\\controller\\name' %}
  do something
{% endif %}
于 2013-03-07T22:58:31.010 に答える