Механизм наследования шаблонов в 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. 🚀

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *