Загрузка...

Laravel. Шаблонизатор Blade

laravel cover

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')

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *