Php Symfony2-Twig-如何向父模板发送参数?

Php Symfony2-Twig-如何向父模板发送参数?,php,symfony,twig,Php,Symfony,Twig,我正在使用Symfony2和Twig模板处理一个PHP项目,我找不到解决这个问题的方法 我有一个管理包和所有的模板扩展管理基地,其中有一个主模板与菜单 当用户在页面上时,我需要将页面基本模板中菜单的当前选项卡设置为选中 有没有办法通过将参数传递到基本模板?下面是一个简单的示例: base.html.twig: {# base.html.twig #} ... <ul> <li{% if menu_selected|default('one') == 'one' %} cla

我正在使用Symfony2和Twig模板处理一个PHP项目,我找不到解决这个问题的方法

我有一个管理包和所有的模板扩展管理基地,其中有一个主模板与菜单

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


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

下面是一个简单的示例:

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 #}
{% 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>
  • 一个
  • 两个

我刚刚发现的一个更好的方法是基本方法,即检查路线中的快捷路线名称:

<li class="{% if app.request.attributes.get('_route') == 'homepage' %}active{% endif %}">Home</li>
  • Home
  • 或者,另一种方法是根据路线快捷方式所属的组命名所有路线快捷方式名称。例如,来自产品控制器的所有路由都以“product_……”开头,然后在模板中可以执行以下操作:

    <li class="{% if app.request.attributes.get('_route') starts with 'product' %}active{% endif %}">
    

  • 请注意(我自己也无意中发现了这一点),如果在基中设置变量,那么继承模板将无法覆盖它。@carbon我也注意到。。。我想知道是否有办法在基模板中设置一个变量,然后在子模板中重写它?也许,在父模板中,将它包装成一个复选框:
    {%if not menu\u selected is defined%}{%set menu\u selected='one'%}{%endif%}