Laravel Blade — это удобный шаблонизатор, который позволяет быстро разрабатывать проекты. Сегодня я покажу, как использовать Blade-директивы на практических примерах, чтобы упростить процесс разработки.
@isset
Представьте ситуацию, когда вам нужно отобразить информацию, если переменная существует.
Вы можете сделать это с помощью директивы @if
.
@if(isset($status))
<span>{{ $status }}</span>
@endif
Но задачу можно упростить с помощью директивы @isset
. Элемент будет отображен только в том случае, если переменная $status
передана в Blade.
@isset($status)
<span>{{ $status }}</span>
@endisset
Также можно обработать обратное условие.
@isset($status)
<span>{{ $status }}</span>
@else
Нет статуса
@endisset
@unless
Представьте ситуацию, когда вы хотите отобразить сообщение, если пользователь неактивен. С помощью директивы @if
это можно сделать так:
@if(!$user->active)
<p>Пользователь неактивен</p>
@endif
Но удобнее использовать директиву @unless
. Сообщение будет показано, если значение равно false
.
@unless($user->active)
<p>Пользователь неактивен</p>
@endunless
@auth
Если вы хотите показать некоторые элементы, когда пользователь аутентифицирован, вы можете сделать это так:
@if(Auth::check())
<a href="/dashboard" class="dashboard">Панель управления</a>
@endif
Но удобнее использовать директиву @auth
.
@auth
<a href="/dashboard" class="dashboard">Панель управления</a>
@endauth
Также можно добавить обратное условие.
@auth
<a href="/dashboard">Панель управления</a>
@else
<a href="/login">Войти</a>
@endauth
@guest
Вы можете показать элемент, когда пользователь не аутентифицирован, с помощью директивы @guest
.
@guest
<a href="/login">Войти</a>
@endguest
@forelse
Представьте, что вам нужно отобразить посты в категории. Если в категории нет постов, нужно вывести сообщение об этом.
С помощью директивы @if
это можно сделать так:
@if(count($posts))
@foreach($posts as $post)
<div>
<h2>{{ $post->name }}</h2>
<p>{{ $post->text }}</p>
</div>
@endforeach
@else
<p>В этой категории нет постов</p>
@endif
Но удобнее использовать директиву @forelse
. Если постов нет, сработает блок @empty
.
@forelse ($posts as $post)
<div>
<h2>{{ $post->name }}</h2>
<p>{{ $post->text }}</p>
</div>
@empty
<p>В этой категории нет постов</p>
@endforelse
@class
Представьте, что вам нужно добавить классы к HTML-элементу в зависимости от значения некоторых переменных.
Вы можете сделать это с помощью директивы @if
. Это не очень удобный метод, так как в браузере появятся лишние пробелы между именами классов.
@php
$hasError = true;
$forbidden = false;
@endphp
<span class="border
@if($hasError) error @endif
@if($forbidden) forbidden @endif">Результат</span>
Директива @class
решает эту проблему более удобно. Вам больше не нужно писать атрибут class
на элементе. @class
сделает это за вас. Имя класса будет отображено, если значение переменной равно true
.
<span @class([
'border',
'error' => $hasError,
'forbidden' => $forbidden,
])>Результат</span>
Условная директива @continue
Представьте, что вам нужно отобразить кнопку отправки сообщения и дополнительную информацию только для пользователей, которые не заблокированы.
С помощью директивы @if
это можно сделать так:
@foreach($users as $user)
<span>{{ $user->name }}</span>
@if($user->bloked)
@continue
@endif
<span>{{ $user->info }}</span>
<button>Отправить сообщение</button>
@endforeach
Или так:
@foreach($users as $user)
<span>{{ $user->name }}</span>
@if(!$user->bloked)
<span>{{ $user->info }}</span>
<button>Отправить сообщение</button>
@endif
@endforeach
Но удобнее использовать условную директиву @continue
. В этом случае @continue
сработает, если условие внутри скобок равно true
.
@foreach($users as $user)
<span>{{ $user->name }}</span>
@continue($user->bloked)
<span>{{ $user->info }}</span>
<button>Отправить сообщение</button>
@endforeach
Эти Blade-директивы помогут вам писать более чистый и читаемый код, упрощая процесс разработки в Laravel.