{{TOC}} {{DOCVER 4.0=0da300f6445bec5a70d007f503834fce957b065b 16.10.2014 5:19:26, 4.1=efd541a0b218b1c6aafb73f0051c18ed150e3c24 25.05.2014 6:21:03, 4.2=d7b13440c003218ed79e9d508706eca01990122f 4.12.2014 5:01:15}} == ((#контроллеров)) Шаблоны контроллеров == Один из способов использования шаблонов в Laravel - в виде шаблонов контроллеров. Если в классе ((docs/v4/controllers контроллера)) определить свойство %%layout%%, то указанный шаблон будет создан автоматически и будет использоваться при генерации ответа клиенту. **Определение шаблона контроллера** %% class UserController extends BaseController { /** * Шаблон, который должен использоваться при ответе. */ protected $layout = 'layouts.master'; /** * Отображает профиль пользователя. */ public function showProfile() { $this->layout->content = View::make('user.profile'); } } %% == ((#blade)) Шаблоны Blade == **Blade** - простой, но мощный шаблонизатор, входящий в состав Laravel. В отличии от шаблонов ((docs/v4/controllers контроллеров)), Blade основан на концепции //наследования шаблонов// и //секциях//. Все шаблоны Blade должны иметь расширение %%(t) .blade.php%%. **Создание шаблона Blade** %%(html) @section('sidebar') Это - главная боковая панель. @show
@yield('content')
%% **Использование шаблона Blade** %%(html) @extends('layouts.master') @section('sidebar') @parent

Этот элемент будет добавлен к главной боковой панели.

@stop @section('content')

Это - содержимое страницы.

@stop %% Заметьте, что шаблоны, которые расширяют другой Blade-шаблон с помощью **@extend**, просто перекрывают секции последнего. Старое (перекрытое) содержимое может быть выведено директивой **@parent**. Иногда - например, когда вы не уверены, что секция была определена - вам может понадобиться указать значение по умолчанию для директивы **@yield**. Вы можете передать его вторым аргументом: %% @yield('section', 'Default Content'); %% == Другие директивы Blade == === Вывод переменных == %% Привет, {{ $name }}. Текущее время эпохи UNIX: {{ time() }}. %% %%(DOCNEW 4.1=efd541a0b218b1c6aafb73f0051c18ed150e3c24 25.05.2014 6:21:03) === Вывод переменных после проверки на существование === Иногда вам надо вывести значение переменной, но вы не уверены, задано ли оно. То есть вы хотите сделать так: ~%% {{{ isset($name) ? $name : 'Default' }}} ~%% Вместо написания тройного оператора Blade позволяет вам использовать такое удобное сокращение: ~%% {{{ $name or 'Default' }}} ~%% %% === Вывод сырого текста в фигурных скобках === Если вам нужно вывести строку в фигурных скобках, вы можете отменить её обработку с помощью Blade, поставив перед текстом символ %%(t)@%%: %% @{{ Это не будет обработано с помощью Blade }} %% Конечно, весь пользовательский ввод должен быть экранирован или очищен. Для экранирования используйте тройные скобки: %% Привет, {{{ $name }}}. %% %%(DOCNEW 4.1=efd541a0b218b1c6aafb73f0051c18ed150e3c24 25.05.2014 6:21:03) Если вы не хотите экранировать данные, используйте двойные скобки: ~%% Hello, {{ $name }}. ~%% %% .(alert) **Внимание:** будьте очень осторожны и экранируйте переменные, которые содержат ввод от пользователя. Всегда используйте тройные скобки, чтобы преобразовать HTML-сущности в переменной в текст. .(tl_note) Как показывает практика, вместо экранирования только пользовательских переменных безопаснее экранировать весь вывод, делая исключения только в редких случаях - //прим. пер.// === Директива If == %%(html) @if (count($records) === 1)

Здесь есть одна запись!

@elseif (count($records) > 1)

Здесь есть много записей!

@else

Здесь нет записей!

@endif @unless (Auth::check())

Вы не вошли в систему.

@endunless %% === Циклы == %%(html) @for ($i = 0; $i < 10; $i++)

Текущее значение: {{ $i }}

@endfor @foreach ($users as $user)

Это пользователь {{ $user->id }}

@endforeach @while (true)

Это будет длиться вечно.

@endwhile %% %%(DOCNEW 4.2=d7b13440c003218ed79e9d508706eca01990122f 4.12.2014 5:01:15) %%(html) @forelse($users as $user)
  • {{ $user->name }}
  • @empty

    Нет пользователей

    @endforelse ~%% %% === Подшаблоны == %% @include('view.name') %% Вы также можете передать массив переменных во включаемый шаблон: %% @include('view.name', array('some'=>'data')) %% === Перезапись секций == Для полной перезаписи можно использовать директиву **@overwrite**. %%(html) @extends('list.item.container') @section('list.item.content')

    Это - элемент типа {{ $item->type }}

    @overwrite %% === Языковые строки == %% @lang('language.line') @choice('language.line', 1); %% === Комментарии == %%(t) {{-- Этот комментарий не будет включён в сгенерированный HTML --}} %% %%(DOCNEW 4.1=efd541a0b218b1c6aafb73f0051c18ed150e3c24 25.05.2014 6:21:03) == Расширение Blade == Blade позволяет вам определять даже собственные управляющие структуры. После компилирования файла Blade вызывается каждое пользовательское расширение с содержимым представления, это позволяет использовать и такие простые манипуляции как %%str_replace%%, и более сложные регулярные выражения. В компилятор Blade входят вспомогательные методы %%createMatcher()%% и %%createPlainMatcher()%%, которые генерируют выражение, необходимое для создания ваших собственных директив. Метод %%createPlainMatcher()%% используется для директив без аргументов, таких как %%@endif%% и %%@stop%%, а метод %%createMatcher()%% - для директив с аргументами. Следующий пример создаёт директиву %%@datetime($var)%%, которая просто вызывает %%->format()%% для %%$var%%: ~%% Blade::extend(function($view, $compiler) { $pattern = $compiler->createMatcher('datetime'); return preg_replace($pattern, '$1format(\'m/d/Y H:i\'); ?>', $view); }); ~%% %%