Symfony,Twig,如果标签的条件根据当前路线突出显示

时间:2014-06-30 17:53:55

标签: twig symfony

我正在尝试获取一个列表,以突出显示它是否位于当前页面(路径)。但是,我也在页面中有子页面,我也希望列表突出显示。

我有我的菜单if语句:

 <ul class="menu">
                {% if app.request.get('_route') == 'home' %}
                    <li class="current"><a href="{{ path('home')}}">Home</a></li>
                {% else %}
                    <li><a href="{{ path('home')}}">Home</a></li>
                {% endif %}

                {% if app.request.get('_route') == 'reports' %}
                    <li class="current"><a href="{{ path('reports') }}">Reports</a></li>
                {% else %}
                    <li><a href="{{ path('reports') }}">Reports</a></li>
                {% endif %}

// etc etc 

现在在我的报告页面中,路线是/ reports /我有一个菜单,点击&#34;详细信息&#34;,&#34;摘要&#34;等等,它将转到/ reports / detail和/ reports / summary ...我想要它,以便当用户点击这些链接时,主导航仍然会突出显示。

我想知道是否存在类似这样的if语句:

{% if app.request.get('_route') starts with(?) 'reports' %}

因此,每当有人进入/ reports /的子页面时,&#34;报告&#34;菜单中的li仍然会突出显示?

3 个答案:

答案 0 :(得分:3)

我不确定twig是否具有“以...开头”的功能,但您可以使用in检查遏制

{% if 'reports' in app.request.get('_route')  %}

答案 1 :(得分:0)

只是用当前信息更新此问题。 根据当前(2.x)Twig文档,这可能是它所要求的方式。 更具体地说,the documentation表示:

  

您还可以检查字符串是否以另一个字符串开头或结尾:

{% if 'Fabien' starts with 'F' %}
{% endif %}
{% if 'Fabien' ends with 'n' %}
{% endif %}

因此,所需的表达是完全可能的:

{% if app.request.get('_route') starts with 'reports' %}

按预期工作。

答案 2 :(得分:0)

此线程上有一些不错的选择,但另一个选择是将路由传递到数组中。如果您有下拉菜单项,这将很有用。

数组中的项目将是您定义的路线。

sudo udevadm control --reload

然后在菜单栏中将其添加到菜单标签类。

{% set routes = {
'activities':
    [
        'walking',
        'swimming',
        'running'
    ]
} %}