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

2022-08-30 09:52:06

我正在使用Symfony2和Twig模板进行PHP项目,我找不到这个问题的解决方案。

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

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

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


答案 1

下面是一个简单的示例:

基.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>

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

推荐