无法覆盖块内容树枝

时间:2015-02-20 13:58:09

标签: symfony templates twig silex

我试图覆盖标题栏的内容,但没有成功。情况就是这样。

header.html.twig

<!DOCTYPE html>
<html lang="en">

<head>
    <title>{% block pageTitle %}title{% endblock %}</title>
</head>
<body>

layout.html.twig

 {% include 'header.html.twig' %}
    <body>
        <div id="wrapper">
            <div id="page-wrapper">
    ........

users.html.twig

 {% extends 'layout.html.twig' %}
 {% block pageTitle %}Users{% endblock %}

此时页面标题未按预期更改。我已经知道,当模板被包含在内时,无法更改块。 建议是使用嵌入代替。当我改变包含嵌入时我得到了

A template that extends another one cannot have a body in 

任何想法如何管理它?

3 个答案:

答案 0 :(得分:0)

问题可能来自layout.html.twig,你需要定义一个body块,即:

    {% block body %}
    <body>
        <div id="wrapper">
            <div id="page-wrapper">

    [...]
    {% endblock %}

embed combines the behavior of include & extends

答案 1 :(得分:0)

也许使用embeded代替:

{% embed 'layout.html.twig' %}
    {% block pageTitle %}Users{% endblock %}
{% endembed %}

doc: http://twig.sensiolabs.org/doc/tags/embed.html

答案 2 :(得分:0)

您无法覆盖已包含的块,只能扩展它们。

你可以通过改变你的架构来解决这个问题:

layout.html.twig

<!DOCTYPE html>
<html lang="en">

<head>
    <title>{% block pageTitle %}title{% endblock %}</title>
</head>
<body>
    {% block pageBody %}{% endblock %}
</body>
</html>

users.html.twig

{% extends 'layout.html.twig' %}

{% block pageTitle %}Users{% endblock %}

{% block pageBody %}
    <div id="wrapper">
        <div id="page-wrapper">
            (...)
        </div>
    </div>
{% endblock %}

demo