{{TOC}} Встроенная в Laravel система шаблонов "Blade" даёт вам возможность использовать красивый синтаксис для вставки PHP кода. Он также содержит набор функций для быстрого выполнения часто используемых задач. Шаблоны //Blade// кэшируются, поэтому они очень быстры в работе. Как обычно, давайте начнём без длинных предисловий. == Основы == Чтобы включить //Blade// для своего шаблона просто добавьте к нему расширение **.blade.php** вместо обычного **.php**. Больше ничего не требуется. Обычно, когда используя шаблоны в обычных фреймворках на PHP вы часто делаете так: %% %% Короткие теги PHP (**short_tags**) немного облегчают написание: %% =$val?> %% Однако всё равно остаётся, что можно улучшать. Посмотрим, как это выглядит в //Blade// %% {{ $val }} %% Красиво! Пробелы внутри скобок не обязательны, но мне с ними нравится больше. Содержимое фигурных скобок вычисляется и выводится с помощью **echo**. Вы можете использовать любой PHP-код^ %% {{ 5 * time() }} %% Пример выше тоже будет работать. Всё, что делает //Blade// в данном случае - просто трансформирует %%{{ $val }}%% в %%%% - помните об этом, если у вас возникают проблемы. == Логика == Как насчёт циклов вроде **foreach** - ведь они нам очень часто нужны, точно так же как **if** и **else**? //Blade// упрощает использование этих конструкций с помощью "магического значка" %%(t)@%%. Например: %% @foreach ($users as $user)
Привет, Дейв!
@elseПривет, гость!
@endif %% Вот ещё операторы, которые поддерживает Blade - они вам тоже знакомы: %% @for ($i =0; $i < 100 - 1; $i++) Номер №{{ $i }}Пользователей не найдено..
@endforelse %% Последний пример несколько необычен - это цикл **foreach** с добавленным %%(t)@empty%%, который выводит своё содержимое, если переданный массив пустой. Это удобная конструкция, с ней нам не требуется писать лишний **if**. == Группы шаблонов == //Blade// позволяет создавать сложные вложенные шаблоны. С его чистым синтаксисом это может быть одной из лучших реализаций - но вам нужно начать использовать это самим, чтобы понять, насколько это удобно. Создадим //первичный шаблон// и назовём его %%(t)template.blade.php%%: %%(h)Добро пожаловать на мою домашнюю страничку!
@endsection %% Здесь мы используем метод **@layout** для указания шаблона %%(t)template%% как родительского ("layout"). Затем мы используем **@section** и **@endsection** для замещения вызовов **@yield** и **@yield_section** в соответствующих местах //первичного шаблона//. В секции **navigation** вы можете заметить вызов **@parent** - //Blade// заменит его на содержимое родительского шаблона, которое мы перекрыли с помощью %%(t)@section%%. Если мы отформатируем такую страницу в каком-то из наших ((док3:routing маршрутов)) или ((док3:controllers#действи+я))й: %% return View::make('page'); %% ...то получим полноценную страницу, обёрнутую в шаблон **@layout** (%%(t) template%%): %%(h)Добро пожаловать на мою домашнюю страничку!
%% Отлично! Мы можем использовать любое число шаблонов, которое нам нужно - ведь они обычные шаблоны //Blade//. А как передать содержимое для **@section** из нашего ((док3:routing маршрута)) или ((док3:controllers#действия))? Для этого просто вызовем меод %%Section::inject()%% ("вставить") и передадим ему имя шаблона и содержимое секции. %% Route::get('/', array('do' => function () { Section::inject('title', 'Мой сайт'); return View::make('page'); })); %% Вот и всё! Теперь вы знаете, как использовать //Blade//, чтобы сделать свои шаблоны простыми и эффективными. Дизайнеры будут вас любить за это. .(tl_note) В статье не упомянута ещё одна полезная функция - **((док3:views/templating render_each))**. Она принимает массив (например, строк в результате выполнения запроса к БД) и вызывает нужный шаблон для каждого элемента. Например: %%{{ render_each('table', $rows, 'row', 'Строк нет.') }}%% - //прим. пер.// .(tl_note) Если вы столкнулись с ошибкой PHP **Fatal error: Method Laravel\View::__toString() must not throw an exception.** - проверьте файл шаблона на наличие ошибок и непойманных исключений. Это происходит из-за того, что в текущей версии Laravel (3.1 и ниже) //Blade// форматирует шаблон в "ленивом" режиме, когда он преобразуется в строку, и если в этот момент возникает ошибка PHP прерывает выполнение, так как ((http://www.php.net/manual/ru/language.oop5.magic.php#object.tostring __toString)) всегда должен завершаться успешно. - //прим. пер.//