atom1c.ru

7 Blade-директив Laravel, которые упростят вашу жизнь

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.