我已经将导航菜单的渲染设置为单独的树枝模板。原因是菜单是在应用程序的两个不同位置生成的。
现在,我想给导航菜单提供一个参数,以便我知道从哪里生成的这些细微差别。
我尝试了以下代码,但在导航菜单模板中不知道变量:
{% set menuType = 'user' %} {% include 'MyBundle:nav.html.twig' with menuType %}
还尝试了:
{% include 'MyBundle:nav.html.twig' with {'menuType': 'user'} %}
在这两种情况下,小枝都生成了{{menuType}}不存在的错误?
令人惊讶的是,尽管我认为可以像您一样传递一个简单的变量,但似乎只有数组被接受为传递的值。(虽然include doc的两个示例是数组,但没有具体说明。)
对于您的情况,您必须以这种方式编写:
{% set menuType = 'user' %} {% include 'MyBundle:nav.html.twig' with {menuType:menuType} only %}
注意:我添加了only
关键字以禁用对上下文的访问。没有它,您不需要将变量传递给包含的模板,因为它们将有权访问它们。(禁用它是一个好习惯。)
这是带有一些测试和转储的Twigfiddle:https ://twigfiddle.com/gtnqvv
{% set menuType = 'user' %} {% set vars = {'foo': 'bar'} %} {% set z = 'bob' %} {# vars dumps ommitted here, see the fiddle. #} {#% include '1.html.twig' with menuType only %#} {% include '1.html.twig' with {menuType:menuType} only %} {% include '2.html.twig' with vars only %} {% include '3.html.twig' with {z:z} only %} {#% include '3.html.twig' with z only %#}
如您所知,第一行和最后一行注释行不起作用,这是错误:
未捕获的TypeError:传递给Twig_Template :: display()的参数1必须为数组类型,给定字符串
第二个可以根据需要工作,只需将其设置为数组即可。(反正很奇怪)
第三行是来自Twig文档的测试,第四行是使用另一个变量名的测试,请确保。