Blade: шаблоны
Что такое Blade
Blade — это шаблонизатор Laravel. Он позволяет писать HTML с вставками PHP-кода через специальный синтаксис. Шаблоны лежат в resources/views/ и имеют расширение .blade.php. Blade компилируется в обычный PHP и кешируется, поэтому работает быстро.
Простой шаблон
resources/views/hello.blade.php:
<!DOCTYPE html>
<html>
<head><title>Hello</title></head>
<body>
<h1>Привет, {{ $name }}</h1>
</body>
</html>
Возврат шаблона из роута:
Route::get('/hello', function () {
return view('hello', ['name' => 'Мир']);
});
Вывод данных
Двойные фигурные скобки {{ }} выводят значение и автоматически экранируют HTML — это защита от XSS.
{{ $name }}
{{ $user->email }}
{{ 2 + 2 }}
Если нужно вывести сырой HTML (например, из доверенного источника) — используют {!! !!}:
{!! $htmlContent !!}
Это небезопасно для пользовательских данных.
Условия
@if ($user->isAdmin())
<p>Админ</p>
@elseif ($user->isModerator())
<p>Модератор</p>
@else
<p>Пользователь</p>
@endif
Директива @unless выполняет блок, если условие ложно:
@unless ($user->isAdmin())
<p>Не админ</p>
@endunless
Циклы
@foreach ($posts as $post)
<article>{{ $post->title }}</article>
@endforeach
@forelse — это @foreach с обработкой пустого массива:
@forelse ($posts as $post)
<p>{{ $post->title }}</p>
@empty
<p>Постов нет</p>
@endforelse
Переменная $loop
Внутри @foreach доступна переменная $loop с информацией об итерации:
@foreach ($posts as $post)
{{ $loop->index }} {{-- с 0 --}}
{{ $loop->iteration }} {{-- с 1 --}}
{{ $loop->first ? 'первый' : '' }}
{{ $loop->last ? 'последний' : '' }}
@endforeach
Layouts
Layout — это общий каркас страницы, который наследуют другие шаблоны.
resources/views/layouts/app.blade.php:
<!DOCTYPE html>
<html>
<head>
<title>@yield('title', 'Мой сайт')</title>
</head>
<body>
@yield('content')
</body>
</html>
Директива @yield — это место, куда дочерний шаблон вставит свой контент.
Дочерний шаблон:
@extends('layouts.app')
@section('title', 'Главная')
@section('content')
<h1>Добро пожаловать</h1>
@endsection
@extends указывает, какой layout использовать. @section заполняет блоки, объявленные через @yield.
Компоненты
Blade-компоненты — переиспользуемые куски разметки:
php artisan make:component Alert
resources/views/components/alert.blade.php:
<div class="alert">
{{ $slot }}
</div>
Использование:
<x-alert>
Сохранено!
</x-alert>
$slot — это содержимое, переданное внутрь компонента.