Twig块传递给嵌入式模板

Joh*_*n F 7 embed templates block extend twig

我在一个纤薄的框架应用程序中使用twig模板.我有一个模板page.phtml,它对一组数据进行分页,并有几个子块,用于覆盖每个元素细节,如分页用户,事件,订单等.

page.phtml

<div class="page">
    {% block block1 %}default content{% endblock %}
    <ul>
    ...
    </ul>
    {% block block2 %}{% endblock %}
</div>
Run Code Online (Sandbox Code Playgroud)

我有一个event.phtml模板,嵌入page.phtml并添加一些其他内容到页面; 它还会覆盖默认页面的block1内容

event.phtml

<html>
    <body>
        <h1>Event Page</h1>
        {% embed "page.phtml" %}
            {% block block1 %}event page content{% endblock %}
        {% endembed %}
    </body>
</html>
Run Code Online (Sandbox Code Playgroud)

我有一个自定义活动页面过程只需要修改一些活动页面的块,所以我伸出event.phtml像这样

custom_event.phtml

{% extends "event.phtml" %}
{% block block2 %}overridden value{% endblock %}
Run Code Online (Sandbox Code Playgroud)

并期望block2的重写内容显示在父模板嵌入的page.phtml模板中.我可以在父模板中输出block2的值,它就在那里,但在嵌入式模板中却没有.我尝试event.phtml在嵌入中明确地传递块,就像这样

{%embed "page.phtml" %}
    {% block block2 %}{{parent()}}{% endblock %}
    ...
{% endembed %}
Run Code Online (Sandbox Code Playgroud)

但这并没有产生任何影响.如何从custom_event.phtml模板中一直通过扩展event.phtml模板和嵌入page.phtml模板获取重写的block2 ?

Chr*_*oet 0

你不可以做这个。

{% embed %}从技术上讲,定义了一个新的(匿名)模板,它扩展了嵌入模板(这就是它覆盖块的方式)并包含在当前模板中。这实际上只是语法糖{% include %}{% extends %}以避免必须将此部分模板存储在自己的文件中并仅包含一次。
Twig 包含不能通过子模板扩展。仅当前模板的块可用于扩展。并且event.phtml没有任何块。