<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>
закрывает блок содержимого, который будет передан в компонент.Именованные слоты делают компоненты более гибкими и позволяют разделять содержимое на логические части.
Этот механизм особенно полезен при создании сложных и переиспользуемых компонентов, таких как карточки, панели, модальные окна и т.д.
Комментариев нет:
Отправить комментарий