Posted on 29 января, 2025
Механизм наследования шаблонов в Laravel с использованием @section и @yield
Laravel использует Blade – мощный шаблонизатор, который позволяет организовать наследование шаблонов и переиспользование кода. Один из ключевых механизмов – это наследование через @section
и @yield
, что позволяет дочерним шаблонам переопределять или добавлять контент в определённые секции родительского шаблона.
1. Базовый (родительский) шаблон (layouts/app.blade.php
)
В родительском шаблоне используются @yield
, которые создают места для заполнения дочерними шаблонами.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>@yield('title', 'Мой сайт')</title>
</head>
<body>
<header>
<h1>Заголовок сайта</h1>
</header>
<main>
@yield('content')
</main>
<footer>
<p>© 2024 Все права защищены</p>
</footer>
</body>
</html>
@yield('title')
– вставляет заголовок страницы. Второй аргумент ('Мой сайт'
) – значение по умолчанию.@yield('content')
– создаёт место для контента, которое будет переопределяться в дочерних шаблонах.
2. Дочерний шаблон (resources/views/home.blade.php
)
В дочернем шаблоне мы расширяем родительский шаблон с помощью @extends
и переопределяем его секции с @section
.
@extends('layouts.app')
@section('title', 'Главная страница')
@section('content')
<p>Добро пожаловать на мой сайт!</p>
@endsection
@extends('layouts.app')
– говорит Blade, что этот шаблон основан наlayouts/app.blade.php
.@section('title', 'Главная страница')
– заменяет содержимое@yield('title')
в родительском шаблоне.@section('content') ... @endsection
– заполняет секцию@yield('content')
контентом.
3. Добавление контента через @parent
Если мы хотим добавить контент к уже существующему, а не просто заменить его, используется @parent
:
@section('content')
<p>Это дополнительный контент.</p>
@parent
@endsection
Здесь сначала добавляется новый текст Это дополнительный контент.
, а затем вставляется родительский контент.
4. Использование @show
вместо @endsection
Вместо @endsection
можно использовать @show
, чтобы одновременно определить секцию и сразу её вывести.
@section('sidebar')
<p>Это боковая панель.</p>
@show
Вывод
Laravel предоставляет мощный механизм наследования шаблонов через @section
и @yield
, который: ✅ Позволяет переиспользовать код – основной шаблон можно менять без редактирования множества файлов.
✅ Упрощает организацию кода – легко разделять логику отображения.
✅ Гибко управляет контентом – можно дополнять секции с @parent
или сразу выводить @show
.
Этот механизм делает Blade удобным и эффективным инструментом для работы с шаблонами в Laravel. 🚀
Свежие комментарии