Из коробки Laravel поставляется с Blade, мощным движком шаблонов, который делает написание ваших шаблонов в Laravel очень простым. Большинство разработчиков Laravel много знают о фреймворке, но иногда их знания Blade отсутствуют. В этой статье я хочу поделиться с вами десятью директивами Blade, которые очень полезны и могут быть использованы для облегчения вашей жизни разработчика.

Laravel один из самых популярных фреймворков PHP

@json

Вместо того, чтобы вручную вызывать json_encode($array) в ваших шаблонах, вы можете использовать директиву @json

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

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

@isset

Распространенным неоптимальным способом проверки, установлена ли переменная в Blade, является использование директивы if.

@if(isset($blog))
   // переменная $blog определена и не является нулевой
@endif

Это можно сделать с помощью ярлыка, который выглядит намного чище и более читабельным.

@isset($blog)
   // переменная $blog определена и не является нулевой
@endisset

То же самое можно сделать с директивой empty.

@if (empty($blogs))
    // $blogs пустой
@endif
// Также может быть написано как:
@empty($blogs)
    // $blogs пустой
@endempty

@guest и @auth

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

@guest
    // Пользователь не аутентифицирован ...
@endguest
@auth
    // Пользователь аутентифицирован ...
@endauth

@forelse

Директива forelse — это особый вид цикла. Это директива foreach в сочетании с пустой директивой. Взгляните на следующий пример:

@if ($blogs->count())
  @foreach ($blogs as $blog)
    <li>{{ $blog->title }}</li>
  @endforeach
@else
  <p>Нет блогов.</p>
@endif

Приведенный выше пример может быть реорганизован в более чистый способ решения этой проблемы. Это можно сделать с помощью директивы forelse.

@forelse ($blogs as $blog)
    <li>{{ $blog->title }}</li>
@empty
    <p>Нет блогов.</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

Мы можем оптимизировать приведенный выше пример, включив условие в директиву continue и break, чтобы оно могло быть преобразовано в одну строку кода:

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

Это выглядит намного чище, верно?

@each

Директива each объединяет цикл и включает шаблоны в одной директиве.

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

Первый аргумент — это частичное шаблон для отображения каждого элемента в массиве или коллекции. Второй аргумент — это массив или коллекция, через которую вы хотите перейти. Третий аргумент — это имя текущего элемента. Последний аргумент, который является необязательным, является частичным шаблоном, которое будет отображаться, если массив или коллекция пустые.

@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 позволяет вам визуализировать контент где-то еще в другом шаблоне или макете. С помощью директивы push вы можете добавлять содержимое в стек. Это часто используется для визуализации Javascript и CSS. Например, в шаблоне подробного блога мы можем вставить файл Javscript, который необходимо включить. Мы можем сделать это, поместив HTML-код в стек скриптов.

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

В теге <head> макета мы можем отобразить все содержимое стека, используя директиву stack и передавая имя стека, в данном случае сценарии.

<head>
    <!-- Содержание -->

    @stack('scripts')
</head>

Теперь, когда вы прочитали эту статью, я надеюсь, что вы получили новое представление о директивах Blade, которые вы можете использовать. Если эта статья заставила вас начать рефакторинг ваших взглядов; счастливого рефакторинга!

About the Author

Ergashev Lazizbek

Добрый день, дорогие мои читатели, позвольте мне рассказать вам немного о себе. Я Лазизбек Эргашев, я веб-разработчик из Узбекистана. В основном я использую laravel/php для бэкэнда и vuejs/javascript для фронтэнда. Основная цель моего блога - поделиться с вами своим опытом и знаниями.

View All Articles