10 недооцененных команд Blade

Команды Laravel Blade

Laravel Blade — это встроенный в фреймворк шаблонизатор, упрощающий работу с HTML. Хочу поделиться с вами 10 недооцененными командами Balde, которые сделают ваш код чище и сэкономят время.

@forelse

Упрощаем циклы

@if($users->count() > 0)
    @foreach($users as $user)
        <li>{{ $user->name }}</li>
    @endforeach
@else
    <p>Пользователей не найдено</p>
@endif

// Заменяем на

@forelse ($users as $user)
    <li>{{ $user->name }}</li>
@empty
    <p>Пользователей не найдено</p>
@endforelse

 

@each

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

@foreach ($users as $user)
    @include('components.userdetail', ['user' => $user])
@endforeach

// Заменяем на

@each('components.userdetail', $users, 'user')

// или

@each('components.userdetail', $users, 'user', 'components.usernotfound')

 

@json

Передаём массив в шаблон в формате json

<script>
    var users = {!! json_encode($users) !!};
</script>

// Заменяем на

<script>
    var users = @json($users);
</script>

 

@verbatim

Если нужно вывести несколько javascript-переменных, то можно обернуть код этой директивой
и тогда не нужно будет ставить символ @ перед каждым оператором вывода Blade

<div class="container">
    Hello, @{{ name }}.
    Date, @{{ date}}.
</div>

// Заменяем на

@verbatim
<div class="container">
    Hello, {{ name }}.
    Date, {{ date}}.
</div>
@endverbatim

 

@isset & @empty

Удобные сокращения для проверки

@if(isset($records))
    // $records установлена значением, отличным от NULL
@endif

@if(empty($records))
    // $records пуста
@endif

// Заменяем на

@isset($records)
    // $records установлена значением, отличным от NULL
@endisset

@empty($records)
    // $records пуста
@endempty

 

@php

Используем команду для встраивания «чистого» PHP кода в шаблон

@php
    // используем php в шаблоне
    $val3 = $val1 + $val2;
@endphp

 

@push & @stack

Именные стеки. В основном удобно для подключения javascript-библиотек, требующихся для дочерних шаблонов.

// пушим в стек в дочернем шаблоне
@push('scripts')
    <script src="/example.js"></script>
@endpush

// отрисовываем из стека в родительском
<head>
    @stack('script')
</head>

@inject

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

@inject('metrics', 'App\Services\MetricsService')

<div>
    Monthly Revenue: {{ $metrics->monthlyRevenue() }}
</div>


@includeWhen
Подключение шаблона, в зависимости от логического условия

@if($canViewSection)
    @include('components.section', ['some' => 'date'])
@endif

// Заменяем на

@includeWhen($canViewSection, 'components.section', ['some' => 'data'])

 

@hasSection

Проверяет, есть ли содержимое в данной секции

@hasSection('navigation')
    <div class="pull-right">
        @yield('navigation')
    </div>

    <div class="clearfix"></div>
@endif

 

Автор: Adi
Перевод: Demiurge Ash