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