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

Шаблоны и ответы

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

  1. 1. Шаблоны
    1. 1.1. Привязка данных
    2. 1.2. Вложенные шаблоны
    3. 1.3. Именованные шаблоны
    4. 1.4. Составители
  2. 2. Переадресация
    1. 2.1. ...с одноразовыми переменными
    2. 2.2. Скачивание файлов
  3. 3. Ошибки

Шаблоны

В этой статье, так же как и во всех прочих статьях документации термины шаблон («template»), вид («view») и представление («presentation») — полные синонимы и используются взаимозаменяемо — первый наиболее понятен и употребителен в русском языке, второй и третий происходят от концепции MVC. — прим. пер.

Шаблоны содержат тот самый HTML-код, отправляемый клиенту. Разделение представления и бизнес-логики позволяет сделать код понятнее и проще для поддержания. Шаблоны хранятся в папке application/views и имеют расширение .php. Класс PHPView предоставляет удобный интерфейс для форматирования вывода и отправки его клиенту. Посмотрим на примеры.

Код шаблона:

xml<html>
  Файл находится в <kbd>views/home/index.php</kbd>.
</html>

Возвращение шаблона из маршрута:

PHP
Route::get('/', function () {
  return 
View::make('home.index');
});

Возвращение шаблона из контроллера:

PHP
public function action_index () {
  return 
View::make('home.index');
});

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

PHP
Route::get('/', function () {
  
$headers = array('foo' => 'bar');

  return 
Response::make('Привет, мир!'200$headers);
});

Отправка ответа из шаблона:

PHP
return Response::view('home'200$headers);

Привязка данных

Обычно маршрут или контроллер запрашивают данные из модели, которые затем отображаются с помощью шаблона. Таким образом, нам нужен механизм передачи данных в шаблон — для этого есть несколько способов, вы можете выбрать наиболее удобный для себя.

Привязка данных к шаблону:

PHP
Route::get('/', function () {
  return 
View::make('home')->with('name''Джеймс');
});

Доступ к ним из шаблона:

PHP
<html>
  Привет, <?php echo $name?>.
</html>

Привязка данных в «цепочке»:

PHP
View::make('home')
    ->
with('name''Джеймс')
    ->
with('votes'25);

Передача массива с данными:

PHP
View::make('home', array('name' => 'James'));

Привязка через «магические свойства»:

PHP
$view->name  'Джеймс';
$view->email 'example@example.com';

Привязка через интерфейс ArrayAccess:

PHP
$view->name  'Джеймс';
$view['email'] = 'example@example.com';

Добавление общих («разделяемых») данных для всех форматируемых шаблонов:

PHP
View::share('site_name''Моя страничка');

Вложенные шаблоны

Иногда вам нужно будет вложить один шаблон в другой. Вложенные шаблоны иногда называют частичными («partials») и они помогают вам поддерживать шаблоны компактными и модульными.

Вложение шаблона используя метод PHPView->nest:

PHP
View::make('home')->nest('footer''partials.footer');

Передача данных вложенному шаблону:

PHP
$view View::make('home');

$view->nest('content''orders', array('orders' => $orders));

Чтобы вставить шаблон изнутри другого шаблона используется функция render():

PHP
<div class="content">
  <?php echo render('user.profile'); ?>
</div>

Часто один шаблон используется для отображения элемента списка. Например, можно создать шаблон для вывода инфморации об одном заказе, а в другом шаблоне пройти по списку заказов и вывести используя первый шаблон. Чтобы упростить код можно использовать функцию render_each():

PHP
<div class="orders">
  <?php echo render_each('partials.order'$orders'order');
</
div>

Первый параметр — имя шаблона для элемента, второй — массив элементов для форматирования, третий — имя переменной, которой присваивается очередной элемент списка перед передачей в частичный шаблон.

Именованные шаблоны

Шаблонам можно легко присваивать имена (так же, как и маршрутамприм. пер.) для придания им выразительности и организованности.

Регистрация имени для шаблона:

PHP
View::name('layouts.default''layout');

Получение шаблона по имени:

PHP
return View::of('layout');

Привязка данных к именованному шаблону:

PHP
return View::of('layout', array('orders' => $orders));

Составители

Каждый раз, когда создаётся шаблон он вызывает событие-составитель («composer»). Это можно использовать для привязки общих данных к шаблону при каждом его создании. Один из частых случаев использования этого события — добавление панели боковой навигации со списком случайных статей в блоге. Вы можете вложить ваш частичный шаблон в шаблон страницы («layout view»), а затем зарегистрировать составитель для этого частичного шаблона, который будет получать данные из таблицы статей и передавать их в этот шаблон. Больше не нужно угадывать, какие данные должен загрузить именно этот контроллер. Составители обычно помещаются в application/routes.php.

Регистрация составителя для шаблона «home»:

PHP
View::composer('home', function ($view) {
  
$view->nest('footer''partials.footer');
});

Теперь каждый раз, когда создаётся шаблон home его экземпляр будет передан в зарегистрированную анонимную функцию (Closure), где вы можете подготовить его, как вам нужно.

Шаблон может иметь любое число составителей, не обязательно только один. Вам есть, где развернуться!

Переадресация

Важно отметить, что и маршруты, и контроллеры требуют, чтобы ответ клиенту был возвращён с помощью return — вместо простого вызова PHPRedirect::to(); вам нужно вернуть объект как PHPreturn Redirect::to();. В этом отличительная особенность Laravel от большинства других PHP-фреймворков и из-за этого она может быть упущена из вида.

Переадресация на другой URI:

PHP
return Redirect::to('user/profile');

Переадресация с определённым HTTP-кодом:

PHP
return Redirect::to('user/profile'301);

Переадресация на защищённый URI (через HTTPS):

PHP
return Redirect::to_secure('user/profile');

Переадресация на начальную страницу:

PHP
return Redirect::home();

Переадресация на предыдущую страницу (используя PHPRequest::referrer):

PHP
return Redirect::back();

Переадресация на именованный маршрут:

PHP
return Redirect::to_route('profile');

Переадресация на действие контроллера:

PHP
return Redirect::to_action('home@index');

Вам может потребоваться переадресовать пользователя на именованный маршрут и в то же время заменить шаблоны в его адресе ((:any), (:hnum) и т.д.прим. пер.) на нужные значения. Это легко сделать:

PHP
return Redirect::to_route('profile', array($username));

Переадресация к действию с подстановкой значений:**

PHP
return Redirect::to_action('user@profile', array($username));

...с одноразовыми переменными

Часто после того, как пользователь зарегистрировался или вошёл в систему, принято показывать приветственное сообщение — однако как сохранить его так, чтобы оно было доступно только для следующего запроса? Метод PHPRedirect->with используется для переадресации с одновременным сохранением одноразовых переменных (!!(tl_note) «flash data» — значения, удаляемые после того, как клиент откроет страницу, следующую после той, на которой эти значения были сохранены — прим. пер.).

PHP
return Redirect::to('profile')->with('status''Добро пожаловать!');

Вы можете прочитать это значение с помощью метода PHPSession::get:

PHP
$status Session::get('status');

Связанные темы:

Скачивание файлов

Отправка файла на скачивание клиенту:

PHP
return Response::download('file/path.jpg');

Скачивание файла с присвоением имени:

PHP
return Response::download('file/path.jpg''photo.jpg');

Ошибки

Для отсылки страницы об ошибке просто укажите её HTTP-код. Нужный шаблон будет автоматически загружен из папки views/error.

Отправка ошибки 404 («Файл не найден»):

PHP
return Response::error('404');

Отправка ошибки 500 («Внутренняя ошибка сервера»):

PHP
return Response::error('500');

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

Разметка: ? ?

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