Шаблонизатор 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 коде страницы --}}