Функция block
Функция block используется в механизме наследования
шаблонов Twig. Она объявляет именованный участок
шаблона, который дочерний шаблон может переопределить
через тег extends. Первым параметром передаётся
имя блока, а внутри тела блока размещается его
содержимое. Функция также позволяет вывести содержимое
родительского блока через parent.
Синтаксис
{% block name %}
...content...
{% endblock %}
Пример
Давайте создадим базовый шаблон с блоком content:
<!DOCTYPE html>
<html>
<body>
{% block content %}
<p>default content</p>
{% endblock %}
</body>
</html>
Теперь создадим дочерний шаблон, который переопределяет этот блок:
{% extends 'base.html.twig' %}
{% block content %}
<p>article content</p>
{% endblock %}
Результат выполнения кода:
<!DOCTYPE html>
<html>
<body>
<p>article content</p>
</body>
</html>
Пример
Давайте выведем содержимое родительского блока через
функцию parent и добавим своё:
{% extends 'base.html.twig' %}
{% block content %}
{{ parent() }}
<p>article content</p>
{% endblock %}
Результат выполнения кода:
<!DOCTYPE html>
<html>
<body>
<p>default content</p>
<p>article content</p>
</body>
</html>
Пример
Давайте передадим переменную в блок через контроллер:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
class ArticleController extends AbstractController
{
#[Route('/article', name: 'article_index')]
public function index(): Response
{
return $this->render('article/index.html.twig', [
'text' => 'hello'
]);
}
}
?>
И выведем её внутри блока:
{% extends 'base.html.twig' %}
{% block content %}
<p>{{ text }}</p>
{% endblock %}
Результат выполнения кода:
<!DOCTYPE html>
<html>
<body>
<p>hello</p>
</body>
</html>