C выходом Laravel 8 появилась возможность использования в blade-шаблонах встроенного компонента dynamic-component
.
Он удобен, когда выбор компонента для вывода зависит от переменной, то есть до момента выполнения неизвестно, какой компонент будет нужно вывести.
Использование компонента dynamic-component
Например, на основе определенного действия вы выводите пользователю сообщение в user/edit.blade.php
. Скажем, при создании пользователя нужно вывести блок success
, error
или warning
. Для этого у нас есть три разных компонента, соответственно: success.blade.php
, error.blade.php
и warning.blade.php
. Напомню, что компоненты должны находиться в каталоге resources/views/components
.
К примеру, пользователь создан успешно, переменную $messageComponent
в контроллере задаём таким образом:
return view('user.edit', ['messageComponent' => 'success']);
И компонент success.blade.php
в user/edit.blade.php выберется «динамически»:
<x-dynamic-component :component="$messageComponent" />
Подобная запись эквивалентна следующей:
<x-success />
Как видите, компоненты теперь можно рендерить динамически. Соответственно, если по какой-то причине создать пользователя не получилось, то всё, что вам нужно сделать, это просто присвоить переменной messageComponent
значение error
и всё готово. Без необходимости менять blade-шаблоны.
Передача атрибутов
Динамические компоненты позволяют передавать атрибуты в базовые компоненты:
<x-dynamic-component :component="$messageComponent" class="text-red-900" />
И эти параметры доступны в «пакете атрибутов» (attribute bag) компонента:
<div {{ $attributes }}> Невозможно создать пользователя </div>
В итоге мы получим:
<div class="text-red-900"> Невозможно создать пользователя </div>
Автор: Amit Merchant
Перевод: Алексей Широков
Наш Телеграм-канал — следите за новостями о Laravel.