5 полезных Laravel директив
Иногда в laravel представлениях приходится писать определённую логику: проверка на админа, или обычного пользователя, проверка их прав. Однако, благодаря встроенным возможностям создания директив, этот процесс можно сделать удобнее, вынеся всю логику проверки в директивы.
Если вы только недавно начали изучать Laravel, то к вашему счастью, уже существует достаточно встроенных директив blade-шаблонизатора. Создатели фреймворка позаботились о решении самых востребованных задач, и запрограммировали в ядро фреймворка в виде директив. В этой статье будет рассмотрено 5 полезных директив для Laravel программиста.
Как проверить аутентификацию в blade Laravel
Когда производится проверка аутентификации пользователя, то, новопришедший Laravel-разработчик, делал бы что-то похоже на это:
@if(Auth::user())
//делаем что-то с пользователем
@endifИли же используя хелпер, что, по сути, является обёрткой над кодом выше:
@if(auth()->user())
//делаем что-то с пользователем
@endifстатье
Однако, фрейморк имеет встроенную директиву 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Или с аутентификацией:
A cosplay costume should be assessed through sizing, construction and the pieces included in the set. The included accessories should be confirmed before separate items are planned. For a closer costume review, Space Ereshkigal cosplay costume(スペースエレシュキガル コスプレ衣装) identifies the matching character outfit. It can be evaluated for movement, changing and storage needs. Comfort, movement and fabric care are as important as the visual design. A short fitting test can reveal adjustments needed before the event.
@auth
//я пользователь
@else
//я гость
@endauthРезюме
В итоге, были рассмотрены полезные директивы, упрощающие работу с фреймворком в blade-представлениях. Это удобно и практично, это один из путей следования правильному программированию: вынося логику проверок из представлений в сам фреймворк. Теперь, если вдруг изменится логика проверки аутентификации или прав, то вы с лёгкостью можете переопределить директивы, изменив их в одном месте, вместо того, чтобы шастать по всем представлениям, изменяя все проверки, которые были жестко запрограммированы. Так что, использование директив, и их правильное внедрение приносит гораздо больше преимуществ, чем просто сокращение кода.
Для того, чтобы более детально изучить все строенные директивы, советую почитать документацию