Symfony2 - Twig - 如何将参数发送到父模板?

时间:2013-06-21 20:54:09

标签: php symfony twig

我正在使用带有Twig模板的Symfony2进行PHP项目,我无法找到解决此问题的方法。

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

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

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

2 个答案:

答案 0 :(得分:80)

这是一个简单的例子:

<强> 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>

答案 1 :(得分:2)

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

<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 %}">