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.
