查找数组中的项是否在子字符串twig中

时间:2016-04-21 16:52:21

标签: php symfony twig silex

我正在阅读 Find substring in the string in TWIG

并且在单个项目上它对我来说很好。

<!-- language: lang-html -->
<li {% if 'page' in app.request.get('_route')|lower %}class="active"{% endif %}>
    <a href="{{path('adminPage')}}">
        <i class="fa fa-file-text"></i> <span>{% trans %}pages_text{% endtrans %}</span> <small class="label pull-right bg-{% if nav_options.count_pages > 0 %}primary{% else %}red{% endif %}">{{ nav_options.count_pages }}</small>
    </a>
</li>

现在我发现自己需要以不同的方式发生这种情况。

我该如何查找“this substring”中是否包含“此数组中的项目”

示例将是这样的

{% if ['str1','str2'] in/contained in app.request.get('_route')|lower %}class="active"{% endif %}

我尝试了这个并且不起作用。

我也宁愿避免使用“或”运算符,如果它的要求如此,但如果可以避免,那就更好了。

我甚至去尝试拆分参数。

{% if 'page,blog'|split(',') in app.request.get('_route')|lower %}active {% endif %}

没有骰子!

代码意味着允许我在可折叠菜单项中包含“几条可能的路线”,如果任何可能的路线名称(我有几个路线名称,博客,blogAdd,blogEdit,blogPost等)包含“博客” “(与页面相同,还有许多其他内容)应该打印”活动“类。

2 个答案:

答案 0 :(得分:2)

创建自定义树枝功能将是一种更容易使用的解决方案

$function = new Twig_SimpleFunction('array_in_string', function ($haystacks, $needle) {
    foreach($haystacks as $haystack) if (stripos($haystack, $needle) !== false) return true;
    return false;
});

$twig = new Twig_Environment($loader);
$twig->addFunction($function);

然后在Twig中调用此函数:

{% if array_in_string(['page','blog',], app.request.get('_route')) %}
   {# do sthing #}
{% endif %}

答案 1 :(得分:0)

我认为你不应该在你的视图中访问HTTP内容 - 例如获取变量。那个MVC有点混乱了。

我解析你控制器中的所有内容,然后将结果传递给视图(显然未经测试,因此将其视为伪代码):

// controller
$thingIsActive =  in_array(strtolower($request->get('_route')), ['str1','str2']);
return $app['twig']->render('whatever.twig', ['thingIsActive' => $thingIsActive]);

{# whatever.twig #}
<li{% if thingIsActive %} class="active"{% endif %}>