56

我正在使用带有 Twig 模板的 Symfony2 开发一个 PHP 项目,但我找不到解决这个问题的方法。

我有一个管理包,所有模板都从管理库扩展而来,它有一个带有菜单的主模板。

当用户在该页面上时,我需要将页面基本模板中菜单的当前选项卡设置为选中。

有没有办法通过extends将参数传递给基本模板?

4

2 回答 2

93

这是一个简单的例子:

base.html.twig

{# base.html.twig #}
...
<ul>
  <li{% if menu_selected|default('one') == 'one' %} class="selected"{% endif %}>One</li>
  <li{% if menu_selected == 'two' %} class="selected"{% endif %}>Two</li>
  <li{% if menu_selected == 'three' %} class="selected"{% endif %}>Three</li>
</ul>
...

page2.html.twig

{# page2.html.twig #}
{% extends 'YourBundle::base.html.twig' %}

{% set menu_selected = 'two' %}

渲染 page2.html.twig 的输出:

<ul>
  <li>One</li>
  <li class="selected">Two</li>
  <li>Three</li>
</ul>
于 2013-06-21T21:51:40.090 回答
4

我刚刚发现的一种更好的方法是通过检查快捷路径名称的路径的基本方法:

<li class="{% if app.request.attributes.get('_route') == 'homepage' %}active{% endif %}">Home</li>

或者另一种方法是根据它所属的组命名所有路由快捷方式名称。例如,您的产品控制器中的所有路由都以“product_....”开头,然后在模板中您可以这样做:

<li class="{% if app.request.attributes.get('_route') starts with 'product' %}active{% endif %}">
于 2016-08-04T13:29:02.407 回答