5 полезных Laravel директив

5 полезных Laravel директив

Иногда в laravel представлениях приходится писать определённую логику: проверка на админа, или обычного пользователя, проверка их прав. Однако, благодаря встроенным возможностям создания директив, этот процесс можно сделать удобнее, вынеся всю логику проверки в директивы.
Если вы только недавно начали изучать Laravel, то к вашему счастью, уже существует достаточно встроенных директив blade-шаблонизатора. Создатели фреймворка позаботились о решении самых востребованных задач, и запрограммировали в ядро фреймворка в виде директив. В этой статье будет рассмотрено 5 полезных директив для Laravel программиста.

Как проверить аутентификацию в blade Laravel

Когда производится проверка аутентификации пользователя, то, новопришедший Laravel-разработчик, делал бы что-то похоже на это:

@if(Auth::user())
    //делаем что-то с пользователем
@endif

Или же используя хелпер, что, по сути, является обёрткой над кодом выше:

@if(auth()->user())
    //делаем что-то с пользователем
@endif

Подронее о 5 полезных хелперах можете почитать в предыдущей статье

Однако, фрейморк имеет встроенную директиву auth, предназначенную для этих целей:

@auth
    //делаем что-то с пользователем
@endauth

Как проверить статус гостя в Laravel

Помимо проверки аутентификации пользователя, так же часто приходится проверять, является ли текущий посетитель гостем.

Так будет выглядеть нативная проверка:

@if(auth()->guest())
    //посетитель неаутентифицирован. Гость!
@endif

В противовес этому коду, существует директива guest:

@guest
    //посетитель неаутентифицирован. Гость!
@endguest

Как подключить blade-шаблон, если он существует - иначе, другой

При создании сайта с множеством тем оформления и стилей предусматривает многочисленные проверки существования blade-шаблонов. И часто бывает, что необходимо проверить, существует ли в этой теме файл шаблона, иначе же, подключить дефолтный шаблон.

Чтобы это предусмотреть, напишем условие:

@if(view()->exists('custom-view'))
    @include('custom-view')
@else
    @include('default-view')
@endif

Но, намного лаконичнее будет использовать директиву includeFirst:

@includeFirst(['suctom-view', 'default-view']);

Как подключить blade-шаблон исходя из условия

Подключение представления, в зависимости от условия, иногда, приходится очень полезным. Это здорово помогает, когда требуется показать контент, в зависимости от определённого динамического условия.
К примеру, если пользователь имеет достижения, или посты, то подключить соответствующий компонент:

@if($user->hasAchives())
    @include('user.achieves')
@endif

Но, проще, используя директиву includeWhen:

@includeWhen($user->hasAchives(), 'user.achieves');

Которая, при выполнении условия $user->hasAchives() == true, подключит представление user.achieves

Как проверить и подключить существующее представление

Опять таки, возвращаясь к теме кастомизации шаблонов, и создания многотемной системы, нельзя не затронуть функцию проверки существования представлений.

Для проверки, существует ли тема, напишем:

@if(view()->exists('custom-view'))
    @include('custom-view')
@endif

Но, куда проще описать это условие директивой includeIf

@includeIf('custom-view')

И все проверки, и дальнейшее подключение просто свелись к одной строке кода. Не чудо ли?

Третьего не дано?

Помимо выше рассмотренных вариантов применения директив (проверки соответствия условию - auth, guest), на этом функциональность директив не заканчивается. Оказывается, что, есть возможность проверки условия, и, в случае его не выполнения, следовать второму сценарию (if(...) {} else {}).

Проверка гостя:

@guest
    //посетитель неаутентифицирован. Гость!
@else
    //посетитель аутентифицирован. НЕГость!
@endguest

Или с аутентификацией:

@auth
    //я пользователь
@else
    //я гость
@endauth

Резюме

В итоге, были рассмотрены полезные директивы, упрощающие работу с фреймворком в blade-представлениях. Это удобно и практично, это один из путей следования правильному программированию: вынося логику проверок из представлений в сам фреймворк. Теперь, если вдруг изменится логика проверки аутентификации или прав, то вы с лёгкостью можете переопределить директивы, изменив их в одном месте, вместо того, чтобы шастать по всем представлениям, изменяя все проверки, которые были жестко запрограммированы. Так что, использование директив, и их правильное внедрение приносит гораздо больше преимуществ, чем просто сокращение кода.
Для того, чтобы более детально изучить все строенные директивы, советую почитать документацию