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' %}
внутри тела блока в базовом файле.