使用包含和扩展始终显示错误,无法加载

时间:2017-05-06 04:29:33

标签: symfony twig template-engine templating twig-extension

我有base.twig这样:

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=996">
        <meta name="description" content="{{ meta_description }}">
        <meta name="author" content="">
        <link rel="icon" href="{{ assets_url }}img/ico.png">
        <title>{{ meta_title }}</title>
        <link rel="stylesheet" href="{{ assets_url }}css/main.css">
        <script src="{{ assets_url }}js/jquery-1.11.3.min.js"></script>
        <script src="{{ assets_url }}js/plugin.js"></script>
        <script src="{{ assets_url }}js/main.js"></script>
    </head>
    <body>

        {% include 'partials/header.twig' %}

    </body>
</html>

我尝试在header.twig中导入base.twig但无法正常工作,但仍然收到如下错误消息:

Fatal error: Uncaught Twig_Error_Syntax: A template that extends another one cannot include contents outside Twig blocks. Did you forget to put the contents inside a {% block %} tag? 

这是header.twig档案:

{% extends "base.twig" %}

<!-- my content header is here -->

我错过了什么?我的代码出了什么问题?,我在https://twig.sensiolabs.org/doc/2.x/中读到了。请给我解决方案或其他东西。谢谢。

1 个答案:

答案 0 :(得分:1)

只需从header.html.twig移除延伸。阅读the documentation

扩展某些父模板的模板不能包含在父模板中,因为存在无限循环。 如果要分离部分代码,只需将其拆分为另一个树枝并包含它。

但是如果你想创建一个基于另一个模板的独立模板,那么模板必须扩展base.html.twig

E.g。 articles.html.twig扩展了base.html.twig,其中包含header.html.twig

在代码中:

<强> base.html.twig

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8">
    </head>
    <body>
        {% include 'partials/header.html.twig' %}

        {% block body %}
        {% endblock %}
    </body>
</html>

<强> header.html.twig

<div>
   my header
</div>

<强> articles.html.twig

{% extends base.html.twig %}

{% block body %}
    <div>
        articles content
    </div> 
{% endblock %}

现在,您从控制器渲染的articles.html.twig应如下所示:

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8">
    </head>
    <body>
        <div>
            my header
        </div>

        <div>
            articles content
        </div>  
    </body>
</html>