Динамические blade-компоненты

Динамические blade-компоненты

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.