Содержание
Zend_View является классом для работы с частью view (вид)
паттерна MVC (model-view-controller). То есть он предназначен для
того, чтобы помочь держать скрипты видов отдельно от
скриптов модели и контроллера. Он предоставляет систему вспомогательных классов, фильтрации вывода и экранирования переменных.
Zend_View является независимым от выбранной системы шаблонов,
вы можете использовать PHP как язык шаблонов или создавать
экземпляры других шаблонизаторов и работать с ними
с помощью ваших скриптов вида.
Использование Zend_View заключается главным образом в двух
основных шагах:
1. Ваш скрипт контроллера создает экземпляр Zend_View и
объявляет переменные этого экземпляра.
2. Контроллер приказывает Zend_View воспроизвести
данный вид, посредством этого производится контроль за скриптом
вида, который генерирует выходные данные вида.
В качестве простого примера предположим, что ваш контроллер имеет список данных по книгам, который нужно воспроизвести через вид. Скрипт контроллера может выглядеть наподобие этого:
<?php
// использование модели для получения данных для заголовков и авторов книг
$data = array(
array(
'author' => 'Hernando de Soto',
'title' => 'The Mystery of Capitalism'
),
array(
'author' => 'Henry Hazlitt',
'title' => 'Economics in One Lesson'
),
array(
'author' => 'Milton Friedman',
'title' => 'Free to Choose'
)
);
// теперь объявляем данные по книгам экземпляру Zend_View
Zend_Loader::loadClass('Zend_View');
$view = new Zend_View();
$view->books = $data;
// и выполняем скрипт вида "booklist.php"
echo $view->render('booklist.php');
?>
Теперь нам нужен сопутствующий скрипт вида "booklist.php".
Это такой же скрипт PHP, как и остальные, за одним исключением:
он выполняется в области видимости экземпляра Zend_View,
это означает, что ссылки на $this ссылаются на свойства
и методы экземпляра Zend_View (переменные, объявляемые
контроллером для экземпляра, являются открытыми
свойствами экземпляра Zend_View). Таким образом,
базовый скрипт вида может похожим на этот:
<?php if ($this->books): ?>
<!-- Таблица нескольких книг. -->
<table>
<tr>
<th>Author</th>
<th>Title</th>
</tr>
<?php foreach ($this->books as $key => $val): ?>
<tr>
<td><?php echo $this->escape($val['author']) ?></td>
<td><?php echo $this->escape($val['title']) ?></td>
</tr>
<?php endforeach; ?>
</table>
<?php else: ?>
<p>Нет книг для отображения.</p>
<?php endif; ?>
Обратите внимание, что мы используем метод escape()
для экранирования переменных.