如何在 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 %&nbsp;</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 中将变量从父模板传递到子模板?的主要内容,如果未能解决你的问题,请参考以下文章

在django中将动态变量从父模板传递给子模板

在Android中将变量从父视图传递到子视图

如何在 Vue JS 中将更新的值从父组件发送到子组件?

将动态插槽从父级传递到子级到孙子级

如何在从父组件到子组件的角度5中单击时传递数据?

如何在角度2中将数据从父构造函数传递到子组件