并且在单个项目上它对我来说很好。
<!-- 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等)包含“博客” “(与页面相同,还有许多其他内容)应该打印”活动“类。
答案 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 %}>