symfony2 错误分支 "A template that extends another one cannot have a body"

symfony2 error twig "A template that extends another one cannot have a body"

我有错误"A template that extends another one cannot have a body in DFSiteBundle:Accueil:index.html.twig ",但我没有html块外。

复制问题的最小代码:

这行不通:

{% extends "::layout.html.twig" %}

{% stylesheets 'bundles/DFSite/css/*' filter='cssrewrite' %}
    <link rel="stylesheet" href="{{ asset_url }}" />
{% endstylesheets %}

{% block content %}
    Test
{% endblock %}

这项工作:

{% extends "::layout.html.twig" %}

{% block content %}
    Test
{% endblock %}

与 layout.html.twig :

<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    {% stylesheets %}{% endstylesheets %}
    <title>{% block title %}The title{% endblock %}</title>
</head>
<body>

{% block content %}
{% endblock %}

</body>

如果我直接添加这个

{% stylesheets 'bundles/DFSite/css/*' filter='cssrewrite' %}
    <link rel="stylesheet" href="{{ asset_url }}" />
{% endstylesheets %}

代替 layout.html.twig 中的空 %stylesheets%,它有效

我很困惑……

这里的错误很容易理解:当您扩展模板时,您被迫仅使用已定义的父块 全新块。

查看您的 layout.html.twig 很容易注意到您没有为 {% stylesheets %} 定义任何块。在您的子模板中,这将导致我所说的错误。

一个可行的解决方案应该是这样的

1) 修改layout.html.twig

<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    {% block stylesheets %}{% endblock %}
    <title>{% block title %}The title{% endblock %}</title>
</head>
<body>

{% block content %}
{% endblock %}

</body>

2) 修改扩展先前模板的文件

{% extends "::layout.html.twig" %}

{% block stylesheets %}
    {% stylesheets 'bundles/DFSite/css/*' filter='cssrewrite' %}
        <link rel="stylesheet" href="{{ asset_url }}" />
    {% endstylesheets %}
{% endblock %}

{% block content %}
    Test
{% endblock %}