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

Шаблоны Blade

Blade - простой, но мощный шаблонизатор, входящий в состав Laravel. Blade основан на концепции наследования шаблонов и секциях. Все шаблоны Blade должны иметь расширение .blade.php.

Создание шаблона Blade

<!-- Stored in resources/views/layouts/master.blade.php -->

<html>
    <head>
        <title>App Name - @yield('title')</title>
    </head>
    <body>
        @section('sidebar')
            Это - главный сайдбар.
        @show

        <div class="container">
            @yield('content')
        </div>
    </body>
</html>

Использование шаблона Blade

@extends('layouts.master')

@section('title', 'Заголовок страницы')

@section('sidebar')
    @@parent

    <p>Этот элемент будет добавлен к главному сайдбару.</p>
@stop

@section('content')
    <p>Это - содержимое страницы.</p>
@stop

Заметьте, что шаблоны, которые расширяют другой Blade-шаблон с помощью extend, просто перекрывают секции последнего. Старое (перекрытое) содержимое может быть выведено директивой @parent.

Иногда - например, когда вы не уверены, что секция была определена - вам может понадобиться указать значение по умолчанию для директивы @yield. Вы можете передать его вторым аргументом:

@yield('section', 'Default Content')

Другие директивы Blade

Вывод переменной

Привет, {{ $name }}.

Текущее время эпохи UNIX: {{ time() }}.

Вывод переменной с проверкой на существование

Иногда вам нужно вывести переменную, которая может быть определена, а может быть нет. Например:

{{ isset($name) ? $name : 'Default' }}

Но вам не обязательно писать тернарный оператор, Blade позволяет записать это короче:

{{ $name or 'Default' }}

Вывод текста с фигурными скобками

Если вам нужно вывести текст с фигурными скобками - управляющими символами Blade - вы можете поставить префикс @:

@{{ Этот текст не будет обрабатываться шаблонизатором Blade }}

По умолчанию весь выводимый контент экранируется, т.е. все элементы и сущности HTML показываются как есть, вместо того, чтобы обрабатываться браузером. Если вы не хотите, что бы данные экранировались, используйте следующий синтаксис:

Hello, {!! $name !!}.

Примечание: Будьте осторожны с выводом контента, который получен от пользователей. Всегда используйте двойные фигурные скобки для экранирования возможных элементов и сущностей HTML.

Директива If

@if (count($records) === 1)
	Здесь есть одна запись!
@elseif (count($records) > 1)
	Здесь есть много записей!
@else
	Здесь нет записей!
@endif

@unless (Auth::check())
	Вы не вошли в систему.
@endunless

Циклы

@for ($i = 0; $i < 10; $i++)
	Текущее значение: {{ $i }}
@endfor

@foreach ($users as $user)
	<p>Это пользователь{{ $user->id }}</p>
@endforeach

@forelse($users as $user)
  	<li>{{ $user->name }}</li>
@empty
  	<p>No users</p>
@endforelse

@while (true)
	<p>Это будет длиться вечно.</p>
@endwhile

Подшаблоны

@include('view.name')

Вы также можете передать массив переменных во включаемый шаблон:

@include('view.name', ['some'=>'data'])

Перезапись секций

Для полной перезаписи секции можно использовать директиву overwrite:

@extends('list.item.container')

@section('list.item.content')
	<p>Это - элемент типа {{ $item->type }}</p>
@overwrite

Строки файлов локализации

@lang('language.line')

@choice('language.line', 1);

Комментарии

{{-- Этот комментарий не будет выведен в HTML коде страницы --}}