Twig 如何将值推送到模板和分区中的数组,以便在布局中输出它们?

Twig 如何将值推送到模板和分区中的数组,以便在布局中输出它们?,twig,web-component,silex,templating,amp-html,Twig,Web Component,Silex,Templating,Amp Html,我们使用Twig作为模板引擎,但我现在遇到了渲染顺序的问题。见- 我们正在为我们的新网站使用amp,通常需要导入amp和web组件(一次)才能使用它们。因此,我们的想法是创建一个细枝扩展来实现这一点。每次使用组件时,都会通过此细枝函数调用它。该函数检查组件,将其添加到堆栈中,从现在起您可以使用它。然后将堆栈转换为页面头部的导入列表 这里的问题是细枝从上到下的渲染。当我在部分或模板中调用上述函数时,“layout.twig”的呈现已经发生,并且下面/之后的所有函数调用都不会影响堆栈 是否有一个选项

我们使用Twig作为模板引擎,但我现在遇到了渲染顺序的问题。见-

我们正在为我们的新网站使用amp,通常需要导入amp和web组件(一次)才能使用它们。因此,我们的想法是创建一个细枝扩展来实现这一点。每次使用组件时,都会通过此细枝函数调用它。该函数检查组件,将其添加到堆栈中,从现在起您可以使用它。然后将堆栈转换为页面头部的导入列表

这里的问题是细枝从上到下的渲染。当我在部分或模板中调用上述函数时,“layout.twig”的呈现已经发生,并且下面/之后的所有函数调用都不会影响堆栈

是否有一个选项可以将渲染更改为“由内而外”,以便渲染首先使用最低的部分和“气泡”直至模板,最后在渲染之前不使用它们进行布局? 另一种在布局中获取值的方法也不错

期望的行为: 小树枝 小枝
据我所知,不,您不能切换细枝模板的渲染

但是,我建议您查看
{%embed%}
{{render}}
标记

嵌入允许将特定的细枝文件放置在其他具有变量的文件中,因此您可以将每个组件传递到其相关的partials.TWIG文件中

Render允许使用嵌入单独的控制器操作,因此您可以创建一个ControllerAction,该ControllerAction接受一个组件变量并渲染其自己的细枝文件

关于嵌入的文档:


包含Render的文档:

没有更改此行为的选项。但是,您可以使用一个技巧来存档此文件: 在调用
getAllComponents()

布局.细枝

{% set mainContent %}
    {% block content %}{% endblock %}
{% endset %}

{{ getAllComponents() }}

{{ mainContent }}

这个问题实际上有一个神奇的解决方案——一些天才编写了这个程序,它允许您在布局顶部附近的一个块中运行一些代码(输出变量、调用函数等),但要等到其余的细枝模板解析后再执行它们。github页面上有一个示例,展示了如何实现这一点

{% extends Layout.twig %}
{{ addComponent('component1') }}
{% include partials.twig %}
<component1>...</component1>
{{ addComponent('component2') }}
<component2>...</component2>
{{ getAllComponents() }}
{# is empty #}
{% set mainContent %}
    {% block content %}{% endblock %}
{% endset %}

{{ getAllComponents() }}

{{ mainContent }}