我已经设置了一个导航菜单的渲染在一个单独的小枝模板。原因是菜单在应用程序中的两个不同位置生成。
现在我想给予一个参数的导航菜单,所以我知道从与地方,它是产生这些小的差异。
我尝试了以下代码,但在导航菜单模板中不知道该变量:
{% set menuType = 'user' %}
{% include 'MyBundle:nav.html.twig' with menuType %}
还尝试:
{% include 'MyBundle:nav.html.twig' with {'menuType': 'user'} %}
在这两种情况下,wig都生成了{{ menuType }}不存在的错误。
5条答案
按热度按时间k75qkfdt1#
令人惊讶的是,虽然我认为可以像您一样传递一个简单的变量,但似乎只有数组被接受为传递值。(虽然include doc的两个例子是数组,但这并不是特别精确的。
在你的情况下,你必须这样写:
注意:我已经添加了
only
关键字来禁止访问上下文。如果没有它,你就不需要将变量传递给包含的模板,因为它们可以访问它们。(最好禁用它。)下面是一个Twigfiddle,其中包含一些测试和转储:https://twigfiddle.com/gtnqvv
第一个和最后一个注解行不起作用,如你所知,这是错误:
未捕获的类型错误:传递给Twig_Template::display()的参数1必须是数组类型,给定字符串
第二个可以按照你的意愿工作,你只需要把它变成一个数组。(奇怪反正)
第三行是来自Twig文档的测试,第四行是使用另一个变量名的测试,只是为了确保。
jmp7cifd2#
只要变量可用,或包含在父模板中,它就可用于任何包含的模板或子模板。
例如:控制器:
然后,编辑. html. twig:
控制器中的“form”变量可用于包含的模板form.html.twig
dw1jzc5e3#
我在这里为你创建了一个小提琴样本:
https://twigfiddle.com/fpzv26
你需要这样的东西:
soat7uwm4#
我在我的代码中使用它,它对我很有效。var
foo
直接在baz.html.twig
中使用:在wig docs中,它说:
包含的模板可以访问活动上下文的变量。[...]上下文默认传递给模板,但您也可以传递其他变量
qq24tv8q5#
Twig 3建议使用
include function
而不是include tag
,它看起来像这样:with_context = false
阻止传递除包含内的变量之外的任何其他变量。