Use Include and Extends always showing error and can't be loaded

Я имею 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 but not working and still getting error message like this:

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 -->

Что я упустил? What's wrong with my code?, I read in https://twig.sensiolabs.org/doc/2.x/. Please give me solution or something. Благодарю.

2 ответа

Решение

Просто удалите расширение из header.html.twig, Прочитайте документацию.

Шаблон, который расширяет некоторый родительский шаблон, не может быть включен в родительский, потому что существует бесконечный цикл. Если вы хотите отделить часть кода, просто разбейте ее на другую ветку и включите ее.

Но если вы хотите создать независимый шаблон, который опирается на другой, то шаблон должен расширяться base.html.twig,

Например 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>

Ваш 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>
        {% block body %}
        {% endblock %}
    </body>
</html>

и в вашем файле header.twig

{% extends 'base.twig' %}
{% block body %}
// your content goes here
{% endblock %}

Я пытался это будет работать нормально...

в противном случае, если вы хотите включить заголовок в базовый файл. затем просто добавьте

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

внутри тела блока в базовом файле.

Другие вопросы по тегам