Содержание
- 42.1. Введение
- 42.2. Скрипты контроллеров
- 42.3. Скрипты видов
- 42.4. Помощники видов
- 42.4.1. Начальный набор помощников
- 42.4.1.1. Action View Helper
- 42.4.1.2. Partial Helper
- 42.4.1.3. Placeholder Helper
- 42.4.1.4. Doctype Helper
- 42.4.1.5. HeadLink Helper
- 42.4.1.6. HeadMeta Helper
- 42.4.1.7. HeadScript Helper
- 42.4.1.8. HeadStyle Helper
- 42.4.1.9. HeadTitle Helper
- 42.4.1.10. InlineScript Helper
- 42.4.1.11. JSON Helper
- 42.4.1.12. Translate Helper
- 42.4.2. Пути к классам помощников
- 42.4.3. Написание собственных помощников
- 42.5. Zend_View_Abstract
Zend_View
является классом для работы с частью вид (view)
паттерна модель-вид-контроллер (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()
для экранирования переменных.
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
конструктору.
Скорее всего, вам никогда не понадобится вызывать методы
assign()
, render()
или перечисленные ниже
для установки/добавления фильтров, помощников, и путей к скриптам
вида. Тем не менее, если вы хотите самостоятельно расширить класс
Zend_View
или нуждаетесь в доступе к его внутренностям,
то можно использовать следующие аксессоры:
getVars()
возвращает все установленные переменные.clearVars()
удаляет все присвоенные переменные, полезен, если вы хотите повторно использовать объект вида, но хотите контролировать доступность переменных.getScriptPath($script)
возвращает вычисленный путь к данному скрипту вида.getScriptPaths()
возвращает все зарегистрированные пути к скриптам вида.getHelperPath($helper)
возвращает вычисленный путь к классу помощника, имя которого передается в качестве параметра.getHelperPaths()
возвращает все зарегистрированные пути к классам помощников.getFilterPath($filter)
возвращает вычисленный путь к классу фильтра, имя которого передается в качестве параметра.getFilterPaths()
возвращает все зарегистрированные пути к классам фильтров.