Может войдёшь?
Черновики Написать статью Профиль

Шаблоны

перевод документация 4.x

  1. 1. Шаблоны контроллеров
  2. 2. Шаблоны Blade
  3. 3. Другие директивы Blade
    1. 3.1. Вывод переменных
    2. 3.2. Вывод переменных после проверки на существование
    3. 3.3. Вывод сырого текста в фигурных скобках
    4. 3.4. Директива If
    5. 3.5. Циклы
    6. 3.6. Подшаблоны
    7. 3.7. Перезапись секций
    8. 3.8. Языковые строки
    9. 3.9. Комментарии
  4. 4. Расширение Blade
Этот перевод актуален для англоязычной документации на (ветка 4.2) , (ветка 4.1) и (ветка 4.0). Опечатка? Выдели и нажми Ctrl+Enter.

Шаблоны контроллеров

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

Определение шаблона контроллера

PHP
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

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

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

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

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

xml@extends('layouts.master')

@section('sidebar')
  @parent

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

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

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

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

PHP
@yield('section''Default Content');

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

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

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

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

добавлено в 4.1 ()

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

Иногда вам надо вывести значение переменной, но вы не уверены, задано ли оно. То есть вы хотите сделать так:

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

Вместо написания тройного оператора Blade позволяет вам использовать такое удобное сокращение:

PHP
{{{ $name or 'Default' }}}

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

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

PHP
@{{ Это не будет обработано с помощью Blade }}

Конечно, весь пользовательский ввод должен быть экранирован или очищен. Для экранирования используйте тройные скобки:

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

добавлено в 4.1 ()

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

PHP
Hello, {{ $name }}.

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

Как показывает практика, вместо экранирования только пользовательских переменных безопаснее экранировать весь вывод, делая исключения только в редких случаях — прим. пер.

Директива If

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

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

Циклы

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

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

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

добавлено в 4.2 ()

xml@forelse($users as $user)
    <li>{{ $user->name }}</li>
@empty
    <p>Нет пользователей</p>
@endforelse

Подшаблоны

PHP
@include('view.name')

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

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

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

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

xml@extends('list.item.container')

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

Языковые строки

PHP
@lang('language.line')

@
choice('language.line'1);

Комментарии

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

добавлено в 4.1 ()

Расширение Blade

Blade позволяет вам определять даже собственные управляющие структуры. После компилирования файла Blade вызывается каждое пользовательское расширение с содержимым представления, это позволяет использовать и такие простые манипуляции как PHPstr_replace, и более сложные регулярные выражения.

В компилятор Blade входят вспомогательные методы PHPcreateMatcher() и PHPcreatePlainMatcher(), которые генерируют выражение, необходимое для создания ваших собственных директив.

Метод PHPcreatePlainMatcher() используется для директив без аргументов, таких как PHP@endif и PHP@stop, а метод PHPcreateMatcher() — для директив с аргументами.

Следующий пример создаёт директиву PHP@datetime($var), которая просто вызывает PHP->format() для PHP$var:

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

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

Написать комментарий

Разметка: ? ?

Авторизуйся, чтобы прокомментировать.