我正在使用symfony 5/twig,我想在菜单项处于活动状态时高亮显示它(当前路线)。
我正在检查路由参数,如下面的示例所示,但我还没有找到一种方法来处理没有参数传递的情况(这是可选的)。
只要使用带参数的路由,下面的代码就可以正常工作,但是一旦使用不带参数的路由,当它尝试检查app.request.attributes.get('type').id时就会抛出错误,因为app.request.attributes.get('type')显然是null,因此没有属性'id'。
<li>
<a class="{% if app.request.get('_route') == 'app_support_case_new' and app.request.query.get('type') is not defined %}active{% endif %}" href="{{ path('app_support_case_new') }}">
<span class="glyphicon glyphicon-plus glyphicon-plus" aria-hidden="true"></span> No topic
</a>
</li>
<li>
<a class="{% if app.request.get('_route') == 'app_support_case_new' and app.request.attributes.get('type').id == 1 %}active{% endif %}" href="{{ path('app_support_case_new', {'type':1}) }}">
<span class="glyphicon glyphicon-plus glyphicon-user" aria-hidden="true"></span> Staff <i class="glyphicon glyphicon-random opacity50"></i>
</a>
</li>
<li>
<a class="{% if app.request.get('_route') == 'app_support_case_new' and app.request.attributes.get('type').id == 2 %}active{% endif %}" href="{{ path('app_support_case_new', {'type':2}) }}">
<span class="glyphicon glyphicon-shopping-cart" aria-hidden="true"></span> Order
</a>
</li>
在php中,我会在条件中的isset(app.request.attributes.get('type'))前面放一个isset,然后它就会停止检查,但是很明显,twig会检查所有的条件。
我试着加上这个:已定义应用程序请求属性获取(“类型”),并且
例如
<li>
<a class="{% if app.request.get('_route') == 'app_support_case_new' and app.request.attributes.get('type') is defined and app.request.attributes.get('type').id == 1 %}active{% endif %}" href="{{ path('app_support_case_new', {'type':1}) }}">
<span class="glyphicon glyphicon-plus glyphicon-user" aria-hidden="true"></span> Staff <i class="glyphicon glyphicon-random opacity50"></i>
</a>
</li>
但这没有用,错误仍然是:
无法访问空变量的属性(“id”)。
<a class="{% if app.request.get('_route') == 'app_support_case_new' and app.request.attributes.get('type') is defined and app.request.attributes.get('type').id == 1 %}active{%endif %}" href="{{ path('app_support_case_new', {'type':1}) }}">
1条答案
按热度按时间jgovgodb1#
对于此用例,您可以简单地使用过滤器
default
仅供参考:测试
defined
不考虑nullable
值,其行为与PHP中的isset
不同。这是因为测试defined
在后台使用array_key_exists
。请参阅下面的代码片段x一个一个一个一个x一个一个二个x
demo
一个三个三个一个
demo