gpt4 book ai didi

symfony - Twig:在 if 条件下过滤

转载 作者:行者123 更新时间:2023-12-04 05:07:51 27 4
gpt4 key购买 nike

我想在 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' #}

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

最佳答案

好的,我测试了它,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"

这就是为什么你的测试总是错误的。
您需要将比较字符串的反斜杠加倍...
{% if app.request.attributes.get('_controller')|split('::')|first == 'some\\controller\\name' %}
do something
{% endif %}

关于symfony - Twig:在 if 条件下过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15283151/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com