<x-app-layout> — Компоненты Blade
<x-app-layout> — это Blade-компонент,
который появился в Laravel 7 и стал активно использоваться в Laravel 8 и
выше. Компоненты позволяют создавать повторно используемые блоки кода с
изолированной логикой и представлением.
Как это работает:
Компоненты определяются в директории
app/View/Componentsили через команду Artisan:php artisan make:component AppLayout
Это создаст два файла:
AppLayout.php— класс компонента (логика).app-layout.blade.php— шаблон компонента (представление).
Использование компонента:
В шаблоне Blade вы можете использовать компонент следующим образом:<x-app-layout> <!-- Содержимое страницы --> </x-app-layout>Содержимое компонента:
Внутри компонента (app-layout.blade.php) вы можете использовать{{ $slot }}для вывода содержимого, переданного между тегами<x-app-layout>и</x-app-layout>:<!-- resources/views/components/app-layout.blade.php --> <html> <head> <title>My App</title> </head> <body> <header>Header</header> <main> {{ $slot }} <!-- Сюда подставится содержимое страницы --> </main> <footer>Footer</footer> </body> </html>
Преимущества компонентов:
Изоляция логики: Логика компонента может быть вынесена в отдельный класс.
Повторное использование: Компоненты можно использовать в любом месте приложения.
Гибкость: Можно передавать данные в компоненты через атрибуты:
<x-app-layout title="Home Page"> <!-- Содержимое страницы --> </x-app-layout>
<x-app-layout> — это современный подход с использованием компонентов, который предоставляет больше гибкости и изоляции логики
</x-slot> — это часть синтаксиса Blade-компонентов
в Laravel, которая используется для передачи именованных слотов (named
slots) в компоненты. Слоты позволяют передавать блоки содержимого в
компоненты, что делает их более гибкими и переиспользуемыми.
Что такое слоты в Blade-компонентах?
Слоты — это механизм, который позволяет передавать HTML-код или другие Blade-директивы в компонент. Они бывают двух типов:
Анонимный слот (default slot): Передается через
{{ $slot }}в компоненте.Именованные слоты (named slots): Передаются через
<x-slot name="slot-name">.
Как работает </x-slot>?
Когда вы используете <x-slot>, вы определяете блок содержимого, который будет передан в компонент. Закрывающий тег </x-slot> указывает конец этого блока.
Пример использования именованных слотов
Компонент с именованными слотами:
Создадим компонентpanel, который принимает два именованных слота:titleиcontent.php artisan make:component Panel
Файл шаблона компонента (
resources/views/components/panel.blade.php):<div class="panel"> <div class="panel-header"> {{ $title }} <!-- Именованный слот "title" --> </div> <div class="panel-body"> {{ $content }} <!-- Именованный слот "content" --> </div> </div>Использование компонента с именованными слотами:
Теперь, когда вы используете компонентpanel, вы можете передать содержимое для каждого слота с помощью<x-slot>.<x-panel> <x-slot name="title"> This is the Panel Title </x-slot> <x-slot name="content"> This is the content of the panel. </x-slot> </x-panel>Здесь:
<x-slot name="title">определяет содержимое для слотаtitle.<x-slot name="content">определяет содержимое для слотаcontent.</x-slot>закрывает каждый слот.
Результат:
Blade сгенерирует следующий HTML:<div class="panel"> <div class="panel-header"> This is the Panel Title </div> <div class="panel-body"> This is the content of the panel. </div> </div>
Анонимный слот (default slot)
Если вы не указываете имя слота (name), то содержимое будет передано в анонимный слот, который доступен через {{ $slot }} в компоненте.
Пример:
<x-panel>
This is the default slot content.
</x-panel>В компоненте:
<div class="panel">
{{ $slot }} <!-- Анонимный слот -->
</div>Когда использовать </x-slot>?
Используйте </x-slot>, когда:
Вам нужно передать несколько блоков содержимого в компонент.
Вы хотите сделать компонент более гибким и переиспользуемым.
Вам нужно разделить содержимое на логические части (например, заголовок и тело).
Пример с несколькими слотами
Компонент card:
<!-- resources/views/components/card.blade.php -->
<div class="card">
<div class="card-header">
{{ $header }}
</div>
<div class="card-body">
{{ $body }}
</div>
<div class="card-footer">
{{ $footer }}
</div>
</div>Использование компонента:
<x-card>
<x-slot name="header">
Card Title
</x-slot>
<x-slot name="body">
This is the body of the card.
</x-slot>
<x-slot name="footer">
Footer content goes here.
</x-slot>
</x-card>Результат:
<div class="card"> <div class="card-header"> Card Title </div> <div class="card-body"> This is the body of the card. </div> <div class="card-footer"> Footer content goes here. </div> </div>
Заключение
<x-slot>используется для передачи именованных слотов в Blade-компоненты.</x-slot>закрывает блок содержимого, который будет передан в компонент.Именованные слоты делают компоненты более гибкими и позволяют разделять содержимое на логические части.
Этот механизм особенно полезен при создании сложных и переиспользуемых компонентов, таких как карточки, панели, модальные окна и т.д.
Комментариев нет:
Отправить комментарий