Programmer's Reference Guide
| Zend_View |
Введение
Zend_View является классом для работы с частью вид (view) паттерна модель-вид-контроллер (model-view-controller). То есть он предназначен для того, чтобы помочь отделить скрипты видов от скриптов моделей и контроллеров. Он предоставляет систему помощников, фильтрации вывода и экранирования переменных.
Zend_View не зависит от выбранной вами системы шаблонов - вы можете использовать PHP в качестве языка шаблонов или создавать экземпляры других систем шаблонов и работать с ними в ваших скриптах вида.
По существу применение Zend_View состоит из двух шагов: 1. Ваш скрипт контроллера создает экземпляр Zend_View и объявляет переменные этого экземпляра. 2. Контроллер приказывает Zend_View воспроизвести данный вид, посредством этого производится контроль за скриптом вида, который генерирует выходные данные вида.
Скрипт контроллера
В качестве простого примера предположим, что ваш контроллер имеет список данных по книгам, который нужно воспроизвести через вид. Скрипт контроллера может выглядеть наподобие этого:
// использование модели для получения данных о заголовках и авторах книг
$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()
для экранирования переменных.
Опции
Zend_View имеет несколько опций, которые могут использоваться для управления поведением ваших скриптов вида:
-
basePath- базовый путь, начиная от которого устанавливаются пути скриптов, помощников и фильтров. Предполагается, что используется следующая структура директорий:base/path/ helpers/ filters/ scripts/Эта опция может быть установлена через методы
setBasePath(),addBasePath()или опциюbasePathдля конструктора. encoding- кодировка, которую следует использовать при вызове функцийhtmlentities(),htmlspecialchars()и др. По умолчанию используется ISO-8859-1 (latin1). Может быть установлена через методsetEncoding()или опциюencodingдля конструктора.escape- обратный вызов, который следует использовать для методаescape(). Может быть установлен через методsetEscape()или опциюescapeдля конструктора.filter- фильтр, который следует использовать после рендеринга скрипта вида. Может быть установлен через методыsetFilter(),addFilter(), или опциюfilterдля конструктора.strictVars- если опция установлена, то Zend_View генерирует уведомления (notices) и предупреждения (warnings), когда производится обращение к неинициализированной переменной. Опция может быть установлена посредством вызоваstrictVars(true)или передачи опцииstrictVarsконструктору.
Короткие теги в скриптах вида
В нашей документации и примерах мы применяем короткие теги PHP:
<? and <?=. Кроме того, мы обычно
используем » альтернативный
синтаксис для управляющих структур. Их удобно
использовать при написании скриптов вида, они делают конструкции
более лаконичными и позволяют размещать операторы без лишних
переходов на другую строку.
Несмотря на это, многие разработчики
предпочитают использовать длинную форму записи для обеспечения
валидности или переносимости кода. Например, в рекомендуемой
конфигурации PHP
(файл php.ini.recommended) опция short_open_tag
отключена. Также, если вы используете XML в своих скриптах
вида, то с короткими открывающими тегами PHP они не будут проходить
валидацию.
Кроме того, если вы используете короткие теги, и опция
short_open_tag отключена, то скрипты вида будут либо
приводить к ошибкам выполнения, либо просто выводить пользователю
код, включенный в эти теги.
В последнем случае, если вы хотите использовать короткие теги, но они отключены, у вас есть два возможных решения:
-
Включить короткие теги в своем файле
.htaccess:php_value "short_open_tag" "on"
Это будет действовать только в том случае, если у вас есть права на создание и использование файлов
.htaccess. Эта директива также может быть добавлена в конфигурационный файлhttpd.conf. -
Включить обертку потока (stream wrapper), которая будет на лету преобразовывать короткие теги в полные:
$view->setUseStreamWrapper(true);
В этом вызове Zend_View_Stream регистрируется в качестве обертки потока к скриптам вида, благодаря этому код будет работать так же, как если бы короткие теги были были включены.
Замечание: Обертка потока для скриптов вида снижает производительность
Использование обертки потока снижает производительность вашего приложения. Мы рекомендуем включать короткие теги, переписывать свои скрипты вида с тем, чтобы использовалась полная форма записи тегов, либо использовать продуманную стратегию частичного или полного кэширования содержимого страниц.
Вспомогательные аксессоры
Скорее всего, вам никогда не понадобится вызывать
assign(), render() и другие
перечисленные ниже методы
для установки/добавления фильтров, помощников, путей к скриптам
вида. Тем не менее, если требуется расширить класс
Zend_View или нужен доступ к его внутреннему коду,
то можно использовать следующие аксессоры:
-
getVars()возвращает все установленные переменные. -
clearVars()удаляет все присвоенные переменные, полезен, если вы хотите повторно использовать объект вида, но хотите контролировать доступность переменных. -
getScriptPath($script)возвращает вычисленный путь к данному скрипту вида. -
getScriptPaths()возвращает все зарегистрированные пути к скриптам вида. -
getHelperPath($helper)возвращает вычисленный путь к классу помощника, имя которого передается в качестве параметра. -
getHelperPaths()возвращает все зарегистрированные пути к классам помощников. -
getFilterPath($filter)возвращает вычисленный путь к классу фильтра, имя которого передается в качестве параметра. -
getFilterPaths()возвращает все зарегистрированные пути к классам фильтров.
| Zend_View |
