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

Свежие комментарии