如何在 Twig 中将变量从父模板传递到子模板?
Posted
技术标签:
【中文标题】如何在 Twig 中将变量从父模板传递到子模板?【英文标题】:How can I pass variable from parent template to child template in Twig? 【发布时间】:2016-10-04 10:47:51 【问题描述】:我正在使用 Symfony 和 Twig,但找不到下一个问题的解决方案: 在我的父模板 (index.html.twig) 我有这样的代码:
<noscript>
% block noscript %
<div class="alert alert-warning">
<strong>% block notice % notice_js_disabled % endblock % </strong>
% block message % js_disabled % endblock %
</div>
% endblock %
</noscript>
我有扩展 index.html.twig 模板的子模板 (category.html.twig)。
我可以将 notice_js_disabled
var 的值从索引模板传递到类别模板吗?notice_js_disabled
从我的 Symfony indexAction 控制器返回。
统一更新: 我创建的问题的解决方案,接下来: 我制作了名为 main.html.twig 的基本模板,我在其中从控制器渲染元素:
% block header %
render(controller('StoreBundle:Header:index'))
% endblock %
然后,在我的 index.html.twig 文件中,我做了接下来的事情:
% extends 'Store/tpl/main.html.twig' %
% block title % title % endblock %
% block content %
<p class="currentPage" hidden>home</p>
parent()
% endblock %
我不确定它是否正确的解决方案,但它的工作:)
【问题讨论】:
【参考方案1】:您需要做的是: - 在父模板中创建一个变量
% set notice_js_disabled = value_received_from_indexAction %
在你需要那个值的模板之后
notice_js_disabled
希望对你有帮助
【讨论】:
【参考方案2】:在 Twig 中,您可以将一些变量传递给子模板的唯一方法是通过 include 标记。
# template.html will have access to the variables from the current context and the additional ones provided #
% include 'template.html' with 'foo': 'bar' %
% set vars = 'foo': 'bar' %
% include 'template.html' with vars %
但是,通过这种方式,您并没有从子模板扩展某些父模板,而是在做相反的事情:您将一个子模块放入当前模板中。
在 symfony 中只有几个全局变量 您可以在配置中设置一些自定义全局变量,如here 所述
否则你可以使用一些预定义的全局变量,app 变量。 (check it out here)
我个人的建议是您应该检查您的应用程序模板逻辑。
希望对你有帮助!
【讨论】:
是的,我已经考虑过了 - 我需要重写我的模板,因为我走错了路。感谢您的帮助)以上是关于如何在 Twig 中将变量从父模板传递到子模板?的主要内容,如果未能解决你的问题,请参考以下文章