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
Перевод: Алексей Широков
Наш Телеграм-канал — следите за новостями о Laravel.