Любите загадки? Событие всё ещё доступно на сайте

Шаблоны

Вы просматриваете документ для прошлой версии.
Рассмотрите возможность обновления вашего проекта до актуальной версии 13.x. Почему это важно?
На этой странице

Сборка шаблонов в контроллере

Один из способов компоновки шаблонов в Laravel – использовать сборщик шаблонов контроллера. Если в классе контроллера определить свойство layout, то указанный шаблон будет создан автоматически и будет использоваться при генерации ответа клиенту.

Использование сборки шаблонов в контроллере

class UserController extends BaseController {

	/**
	 * Шаблон, который должен использоваться при ответе.
	 */
	protected $layout = 'layouts.master';

	/**
	 * Отображает профиль пользователя.
	 */
	public function showProfile()
	{
		$this->layout->content = View::make('user.profile');
	}

}

Шаблоны Blade

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

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

<!-- Расположен в app/views/layouts/master.blade.php -->

<html>
	<body>
		@section('sidebar')
			Это - главная боковая панель.
		@show

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

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

@extends('layouts.master')

@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 }}

Конечно, любой вывод переменных должен быть должен быть безопасным – все управляющие символы (javascript-код) должны быть преобразованы в обычные видимые символы, во избежание разнообразных атак. Blade это делает автоматически, если переменная выводится в тройных скобках:

Hello, {{{ $name }}}.

Если вы хотите отменить это, выводите переменные в двойных скобках, но будьте осторожны и не выводите в них контент, который мог изменить пользователь:

Hello, {{ $name }}.

Директива 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>Нет пользователей</p>
@endforelse

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

Подшаблоны

@include('view.name')

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

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

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

Для того, чтобы переписать секцию целиком, используйте директиву overwrite:

@extends('list.item.container')

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

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

@lang('language.line')

@choice('language.line', 1)

Комментарии

{{-- Этот комментарий не будет включён в сгенерированный HTML --}}

Расширение Blade

Blade позволяет создавать свои управляющие структуры. Компилятор Blade располагает двумя хелперами:

  • createPlainMatcher используется для директив, не имеющих аргументов, таких, как @endif и @stop.
  • createMatcher используется для директив с аргументами.

Вот, например, код, создающий директиву @datetime($var) , которая аналогична вызову метода format() у переменной $var:

Blade::extend(function($view, $compiler)
{
	$pattern = $compiler->createMatcher('datetime');

	return preg_replace($pattern, '$1<?php echo $2->format(\'m/d/Y H:i\'); ?>', $view);
});