【发布时间】:2015-05-19 11:29:35
【问题描述】:
请帮助我理解在 twig 中使用模板继承的正确方法。
我有一个模板 base.html.twig,我的所有其他模板都扩展了它。这包含html、head、body等标签和一些块。
我想将 base.html.twig 模板中的
部分移动到它自己的文件 head.html.twig 中。如果我使用 include 指令,那么该部分中的标题块将不再被扩展模板正确覆盖。我确定我可以通过将标题设置为扩展模板中的变量并将其传递到我的 include 语句中来解决此问题。但是现在我的页面需要在
部分中加载额外的 javascript,因此我必须添加变量来指示要加载哪些...显然,这是一个可怕的组合。这样做的正确方法是什么?
编辑:在@goto 的建议下,我尝试用嵌入替换包含。现在我的代码看起来像:
{# base.html.twig #}
<!DOCTYPE html>
<html>
{% embed 'AppBundle::head.html.twig' %}
{% block title %}My Company Name{% endblock %}
{% endembed %}
<body>
{% block content %}{% endblock %}
</body>
</html>
{# head.html.twig #}
<head>
<title>{% block title %}{% endblock %}</title>
<!-- load other css, js, etc -->
</head>
{# page.html.twig #}
{% extends 'AppBundle::base.html.twig' %}
{% block title %}{{ page.title }} - My Company Name{% endblock %}
{% block content %}
<h1>{{ page.title }}</h1>
{{ page.content|raw }}
{% endblock %}
但这不起作用,标题总是“我的公司名称”。
【问题讨论】: