{{TOC}} {{DOCVER 5.3=c06d6a2352ed8c767633aab9c20f2bf7d880c967 28.01.2017 5:00:51, 5.2=6b0b057ae6de3c88cb29188459e38383c622ec23 8.12.2016 23:00:15, 5.1=cdc24ba7426c5b11eb4d050706bd78c3ea4913cc 19.06.2016 20:08:01}} == Введение == Blade - простой, но мощный шаблонизатор, поставляемый с Laravel. В отличие от других популярных шаблонизаторов для PHP Blade не ограничивает вас в использовании чистого PHP-кода в ваших представлениях. На самом деле все представления Blade скомпилированы в чистый PHP-код и кешированы, пока в них нет изменений, а значит, Blade практически не нагружает ваше приложение. Файлы представлений Blade используют расширение %%(t).blade.php%% и обычно хранятся в папке %%(t)resources/views%%. == Наследование шаблонов == === Определение макета === Два основных преимущества использования Blade - //наследование шаблонов// и //секции//. Для начала давайте рассмотрим простой пример. Во-первых, изучим макет "главной" страницы. Поскольку многие веб-приложения используют один общий макет для разных страниц, удобно определить этот макет как одно представление Blade: %%
Это дополнение к основной боковой панели.
@endsection @section('content')Это содержимое тела страницы.
@endsection %% В этом примере секция %%(t)sidebar%% использует директиву %%(t)@parent%% для дополнения (а не перезаписи) содержимого к боковой панели макета. Директива %%(t)@parent%% будет заменена содержимым макета при отрисовке представления. Blade-представления могут быть возвращены из маршрутов при помощи глобальной вспомогательной функции %%view()%%: %% Route::get('blade', function () { return view('child'); }); %% == Отображение данных == Вы можете отобразить данные, переданные в ваши Blade-представления, обернув переменную в фигурные скобки. Например, для такого маршрута: %% Route::get('greeting', function () { return view('welcome', ['name' => 'Samantha']); }); %% Вы можете отобразить содержимое переменной %%(t)name%% вот так: %% Hello, {{ $name }}. %% Вы не ограничены отображением только содержимого переменных, передаваемых в представление. Вы также можете выводить результаты любых PHP-функций. На самом деле, вы можете поместить любой необходимый PHP-код в оператор вывода Blade: %% The current UNIX timestamp is {{ time() }}. %% .(alert) Blade-оператор %%{{ }}%% автоматически отправляется через PHP-функцию %%htmlentities()%% для предотвращения XSS-атак. **Вывод переменных после проверки на существование** Иногда вам надо вывести значение переменной, но вы не уверены, задано ли оно. То есть вы хотите сделать так: %% {{ isset($name) ? $name : 'Default' }} %% Вместо написания тернарного оператора Blade позволяет вам использовать такое удобное сокращение, которое будет скомпилировано в тернарный оператор, приведённый ранее: %% {{ $name or 'Default' }} %% Если переменная %%(t)$name%% имеет значение, то оно будет отображено, иначе будет выведено слово %%(t)Default%%. **Вывод неэкранированных данных** По умолчанию Blade-оператор %%{{ }}%% автоматически отправляется через PHP-функцию %%htmlentities()%% для предотвращения XSS-атак. Если вы не хотите экранировать данные, используйте такой синтаксис: %% Hello, {!! $name !!}. %% .(alert) Будьте очень осторожны и экранируйте переменные, которые содержат ввод от пользователя. Всегда используйте экранирование синтаксисом с двойными скобками, чтобы предотвратить XSS-атаки при отображении предоставленных пользователем данных. .(tl_note) Как показывает практика, вместо экранирования только пользовательских переменных безопаснее экранировать весь вывод, делая исключения только в редких случаях — прим. пер. === Blade и JavaScript-фреймворки === Поскольку многие JavaScript-фреймворки тоже используют фигурные скобки для обозначения того, что данное выражение должно быть отображено в браузере, то вы можете использовать символ %%(t)@%%, чтобы указать механизму отрисовки Blade, что выражение должно остаться нетронутым. Например: %%Это пользователь {{ $user->id }}
@endforeach @forelse($users as $user)Нет пользователей
@endforelse @while (true)Это будет длиться вечно.
@endwhile %% %%(DOCNEW 5.3=c06d6a2352ed8c767633aab9c20f2bf7d880c967 28.01.2017 5:00:51, 5.2=6b0b057ae6de3c88cb29188459e38383c622ec23 8.12.2016 23:00:15) .(alert) При работе с циклами вы можете использовать ((#переменная переменную loop)) для получения полезной информации о цикле, например, находитесь ли вы на первой или последней итерации цикла. При работе с циклами вы также можете закончить цикл или пропустить текущую итерацию: ~%% @foreach ($users as $user) @if ($user->type == 1) @continue @endifЭто пользователь {{ $user->id }}
@endforeach ~%% Если вы во вложенном цикле, вы можете обратиться к переменной %%$loop%% родительского цикла через свойство %%parent%%: ~%% @foreach ($users as $user) @foreach ($user->posts as $post) @if ($loop->parent->first) Это первая итерация родительского цикла. @endif @endforeach @endforeach ~%% Переменная %%$loop%% содержит также множество других полезных свойств: %%(hvlraw)Свойство | Описание |
---|---|
$loop->index | Индекс текущей итерации цикла (начинается с 0). |
$loop->iteration | Текущая итерация цикла(начинается с 1). |
$loop->remaining | Число оставшихся итераций цикла. |
$loop->count | Общее число элементов итерируемого массива. |
$loop->first | Первая ли это итерация цикла. |
$loop->last | Последняя ли это итерация цикла. |
$loop->depth | Уровень вложенности текущего цикла. |
$loop->parent | Переменная loop родительского цикла, для вложенного цикла. |