包括延伸
问题描述:
我渲染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
模板。
正是我试图做到的,如果是的话,我该如何实现它?
答
你只需要渲染子模板(扩展名为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
{% 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 %}
另一种可能的解决方案是: 你可以打破一个块成若干块。
是的,这将工作,但我想最终在'base.html.twig'中包含多个附加模板。应该可能已经明确表示了。 – Unflux
这是有效的,但只有当我不重写'extends''Twig'模板中的'block'部分时才有效。 – Unflux
yes - 'render'不能覆盖主题的任何部分 - 它只会在您调用它的地方注入。阅读更多关于继承这里:http://twig.sensiolabs.org/doc/tags/extends.html –