【问题标题】:Include Twig template which Extends包括扩展的 Twig 模板
【发布时间】:2016-02-26 10:48:01
【问题描述】:

我正在渲染一个Twig 模板,如下所示:

$this->render('base.html.twig');

Twig 模板的内容(简化)如下所示:

{% block headers %}
...
{% endblock %}
{% block pagecontent %}
...

    {# I want to include another template (A) here #}
    {# I want to include another template (B) here #}

{% endblock %}
{% block footers %}
...
{% endblock %}

我还有另一个 Twig 模板,我没有渲染,但我想包含在上面的模板中(我在其中放置了我的 Twig 评论)。内容如下:

{% extends '::base' %}
{% block headers %}
{{ parent() }}
{% endblock %}
{% block pagecontent %}
{{ parent() }}
...
{% endblock %}

我想最终在base.html.twig 中渲染几个Twig 模板。

我正在尝试做的事情是否可以实现,如果可以,我该如何实现?

【问题讨论】:

    标签: symfony twig


    【解决方案1】:

    您只需要渲染子模板(扩展base.html.twig 的模板)。

    改变你的控制器:

    $this->render('child_template_extending_base.html.twig');
    

    child_template_extending_base 替换为您的真实模板名称。

    您也可以使用以下代码embed 模板中的另一个控制器视图:

    {{ render(controller(
        'AppBundle:Article:recentArticles',
        { 'max': 3 }
    )) }}
    

    在此处阅读有关此功能的更多信息:http://symfony.com/doc/current/book/templating.html#embedding-controllers

    【讨论】:

    • 是的,这可行,但我想最终在base.html.twig 中包含多个额外的模板。可能应该说清楚。
    • 这有效,但前提是我不覆盖 extends Twig 模板中的 block 部分。
    • 是的 - render 不能覆盖主题的任何部分 - 它只会被注入到你调用它的地方。在此处阅读有关继承的更多信息:twig.sensiolabs.org/doc/tags/extends.html
    • 我一定是做错了什么,我试图在parent 中包含一个extendsparent 的子twig 模板?
    【解决方案2】:

    base.html.twig

    {% block headers %}
    ...
    {% endblock %}
    {% block pagecontent %}
    ...
    
    {# I want to include another template (A) here #}
    {# I want to include another template (B) here #}
    
    {% endblock %}
    {% block footers %}
    ...
    {% endblock %}
    

    你的控制器:

    $this->render('base.html.twig');
    

    通常,$this->render('view.html.twig');只接受一根树枝。 如果你想拥有多个模板,你可以这样构建它:

    view.html.twig

    {% extends '::base' %}
    {% block pagecontent %}
        {# Controller function with template 1 #}
        {{ render(controller('AppBundle:Article:recentArticles',{ 'max': 3 })) }}
        {# Controller with template 2 #}
        {{ render(controller('AppBundle:Article:relatedArticles',{ 'max': 4 })) }}
    {% endblock %}
    

    另一个可能的解决方案是: 您可以将一个块分成几个块。

    【讨论】:

      猜你喜欢
      • 2012-12-16
      • 1970-01-01
      • 1970-01-01
      • 2017-10-13
      • 1970-01-01
      • 2015-08-22
      • 2021-09-20
      相关资源
      最近更新 更多