Blade — шаблонизатор Laravel.
Наследование шаблонов
Два основных преимущества использования Blade — наследование шаблонов и секции. Поскольку многие веб-приложения используют один общий макет для разных страниц, удобно определить этот макет как один layout-шаблон.
<html>
<head>
<title>@yield('title')</title>
</head>
<body>
<div id="content">
@yield('content')
</div>
</body>
</html>Копировать
Теперь создадим дочерний шаблон:
@extends('layouts.site')
@section('title', 'Заголовок страницы')
@section('content')
<p>Это основной контент страницы.</p>
@endsectionКопировать
Вместо @yield('content')
(англ.выдавать) будет подставлено и отрисовано содержимое секции @section('content')
. Директива @yield
может принимать дефолтное значение в качестве второго аргумента. Это значение отрисовывается, если секция, которая должна располагаться на этом месте, не определена.
@yield('content', View::make('view.name'))Копировать
Рассмотрим еще один пример, где используем директиву @parent
. Опять создадим layout-шаблон
<html>
<head>
<title>
@yield('title', 'Заголовок по умолчанию')
</title>
</head>
<body>
<div id="content">
@section('content')
<p>Это контент страницы по умолчанию.</p>
@show
</div>
</body>
</html>Копировать
И создадим два варианта дочернего шаблона:
@extends('layouts.site')
@section('title', 'Новый заголовок страницы')
@section('content')
<p>Это контент замещает контент по умолчанию.</p>
@endsectionКопировать
@extends(‘layouts.site’) @section(‘title’, ‘Новый заголовок страницы’) @section(‘content’) @parent <p>Это контент дополняет контент по умолчанию.</p> @endsection
Вывод переменных
Шаблон вывод переменных:
{{ $name }}
По умолчанию оператор {{…}} прогоняет вывод через функцию htmlspecialchars() для предотвращения XSS-атак. Если данные экранировать не нужно, можно использовать такой синтаксис:
{!! $name !!}
чтобы указать шаблонизатору Blade, что {{}} являются частью JS:
@{{ name }}
Включение частей шаблонов
Директива @include
позволяет включать один шаблон внутри другого шаблона. Все переменные, доступные родительскому шаблону, будут доступны и включаемому шаблону:
<div> @include('shared.errors') <form> <!-- Содержимое формы --> </form> </div>
@includeIf позволяет подключить шаблон, который может и не существовать:
Подключение по условию:
@includeWhen (если true) или @includeUnless (если false):
@includeWhen($boolean, 'view.name', ['some' => 'data']) @includeUnless($boolean, 'view.name', ['some' => 'data'])
Шаблоны для коллекций
Часто возникает ситуация, когда надо в цикле перебрать массив и для отрисовки каждого элемента массива подключить шаблон:
<ul>
@foreach ($users as $user)
@include('parts.user', ['user' => $user])
@endforeach
</ul>Копировать
<!-- шаблон resources/views/parts/user.blade.php -->
<li>Пользователь {{ $user->name }}, почта {{ $user->email }}</li>Копировать
Вместо foreach()
и @include()
можно использовать директиву @each()
:
@each('parts.user', $users, 'user')Копировать
Четветртый аргумент @each()
задает шаблон, который будет использован, если массив пустой:
@each('parts.user', $users, 'user', 'parts.empty')