post.jpg

10 директив Blade, о которых нужно помнить

Фреймворк Laravel "из коробки" включает в себя Blade -  прекрасный шаблонизатор, который делает очень легким написание представлений в Laravel. Многие разработчики, использующие Laravel и преуспевающие в нем, зачастую уделяют недостаточно внимания изучению возможностей такого мощного инструмента, как Blade. В данной статье описано, насколько полезным может оказаться использование Blade и насколько он может облегчить жизнь разработчику.

@json

Вместо вызова php-функции json_encode($array)  в файле представления view вы можете использовать директиву json:


@json($array)

Если вы используете Vue.js для фронтенда, то диреткива json как нельзя более подойдет для передачи параметров из Blade-шаблона в компонент Vue:


<blog-overview-component :blogs='@json($blogs)'>
</blog-overview-component> 

@isset

Проверка существования переменной является стандартной практикой в Blade-шаблоне, и обычно для этого используется директива if:


@if(isset($blog))
   // $blog is defined and is not null
@endif

Но то же самое можно сделать короче и лаконичнее:


@isset($blog)
   // $blog is defined and is not null
@endisset

Аналогичную проверку можно произвести и с помощью директивы empty:


@if (empty($blogs))
    // $blogs is empty
@endif
// Может быть записано как:
@empty($blogs)
    // $blogs is empty
@endempty

@guest and @auth

Blade содержит директивы, которые позволяют определить аутентифицирован текущий пользователь, или нет:


@guest
    // The user is not authenticated...
@endguest
@auth
    // The user is authenticated...
@endauth

@forelse

Директива forelse - это специальный вид цикла, который объединяет в себе директивы foreach и empty. Взгляните на следующий пример:


@if ($blogs->count())
  @foreach ($blogs as $blog)
    <li>{{ $blog->title }}</li>
  @endforeach
@else
  <p>There are no blogs.</p>
@endif

С помощью директивы forelse можно легко произвести рефакторинг вышеуказанного кода и привести его к более ясному виду:


@forelse ($blogs as $blog)
    <li>{{ $blog->title }}</li>
@empty
    <p>There are no blogs.</p>
@endforelse

@continue and @break

В Blade имеются директивы continue и break, которые позволяют соответственно продолжать и прекращать выполнение цикла


@foreach ($blogs as $blog)
    @if (!$blog->is_validated)
        @continue
    @endif
    <li>{{ $blog->title }}</li>
    @if ($blog->is_last)
        @break
    @endif
@endforeach

Вышеуказанный код можно оптимизировать следующим образом:


@foreach ($blogs as $blog)
    @continue(!$blog->is_validated)
    <li>{{ $blog->title }}</li>
    @break($blog->is_last)
@endforeach

@each

Директива each объединяет цикл и включенные в него представления view в одну единую директиву


@each('blog.item', $blogs, 'blog', 'blog.no-items')

Первый аргумент - частичное представление (view partial) для рендеринга каждого элемента массива или коллекции. Второй аргумент - массив или коллекция, к которому применяется цикл. Третий аргумент - имя текущего эелемента. Последний (необязательный) аргумент - представление, которое должно быть сгенерировано, если массив или коллекция пустые

@includeWhen

Директива include позволяет подключать один файл blade-шаблона внутри другого:


@if($blog->likes->count())
    @include('view.name', ['blog' => $blog])
@endif

При использовании директивы includeWhen тот же самый код можно записать одной строкой:


@includeWhen($blog->likes->count(), 'view.name', ['blog' => $blog])

@stack and @push

Директива stack позволяет генерировать контент в стороннем представлении (view) или макете (layout). Используя же директиву push можно добавлять контент в множество (stack). Такой прием зачастую используется для включений с JavaScript или CSS.

Например, если в представление с деталями блога требуется включить JS-файл, то это можно сделать так:


@push('scripts')
    <script src="/blog-detail.js"></script>
@endpush

Точно так же, в тэге заголовка

можно включить stack-содержимое, используя директиву stack и передавая в качестве аргумента имя множества (в данном случае 'scripts')


<head>
    <!-- Your head content -->

    @stack('scripts')
</head>

 

Поделиться
" data-limit="3" data-counter>

КОММЕНТАРИИ (0)