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
Комбинируем цикл и подключение шаблона в одну строку.
Первый аргумент — представление, которое нужно отрисовать для каждого элемента массива.
Второй — массив или коллекиця для перебора.
Третий — имя переменной для текущей итерации в представлении.
Также можно передать необязательный четвертый параметр — представление, которое будет использовано, если массив пуст.
@foreach ($users as $user)
@include('components.userdetail', ['user' => $user])
@endforeach
// Заменяем на
@each('components.userdetail', $users, 'user')
// или
@each('components.userdetail', $users, 'user', 'components.usernotfound')
Передаём массив в шаблон в формате 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
Удобные сокращения для проверк
@if(isset($records))
// $records установлена значением, отличным от NULL
@endif
@if(empty($records))
// $records пуста
@endif
// Заменяем на
@isset($records)
// $records установлена значением, отличным от NULL
@endisset
@empty($records)
// $records пуста
@endempty
Используем команду для встраивания «чистого» PHP кода в шаблон
@php
// используем php в шаблоне
$val3 = $val1 + $val2;
@endphp
Именные стеки. В основном удобно для подключения javascript-библиотек, требующихся для дочерних шаблонов.
// пушим в стек в дочернем шаблоне
@push('scripts')
<script src="/example.js"></script>
@endpush
// отрисовываем из стека в родительском
<head>
@stack('script')
</head>
Внедрение любого класса из сервис-контейнера.
Первый аргумент — переменная, куда будет помещен сервис.
Второй — имя класса, который вы хотите извлечь.
@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('navigation')
<div class="pull-right">
@yield('navigation')
</div>
<div class="clearfix"></div>
@endif
Автор: Adi
Перевод: Demiurge Ash