Глава 42. Zend_View

42.1. Введение

Zend_View является классом для работы с частью вид (view) паттерна модель-вид-контроллер (model-view-controller). То есть он предназначен для того, чтобы помочь отделить скрипты видов от скриптов моделей и контроллеров. Он предоставляет систему помощников, фильтрации вывода и экранирования переменных.

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

Использование Zend_View в основном состоит из двух шагов: 1. Ваш скрипт контроллера создает экземпляр Zend_View и объявляет переменные этого экземпляра. 2. Контроллер приказывает Zend_View воспроизвести данный вид, посредством этого производится контроль за скриптом вида, который генерирует выходные данные вида.

42.1.1. Скрипт контроллера

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

<?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');
        

42.1.2. Скрипт вида

Теперь нам нужен сопутствующий скрипт вида "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() для экранирования переменных.

42.1.3. Опции

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 конструктору.

42.1.4. Вспомогательные аксессоры

Скорее всего, вам никогда не понадобится вызывать методы assign(), render() или перечисленные ниже для установки/добавления фильтров, помощников, и путей к скриптам вида. Тем не менее, если вы хотите самостоятельно расширить класс Zend_View или нуждаетесь в доступе к его внутренностям, то можно использовать следующие аксессоры:

  • getVars() возвращает все установленные переменные.

  • clearVars() удаляет все присвоенные переменные, полезен, если вы хотите повторно использовать объект вида, но хотите контролировать доступность переменных.

  • getScriptPath($script) возвращает вычисленный путь к данному скрипту вида.

  • getScriptPaths() возвращает все зарегистрированные пути к скриптам вида.

  • getHelperPath($helper) возвращает вычисленный путь к классу помощника, имя которого передается в качестве параметра.

  • getHelperPaths() возвращает все зарегистрированные пути к классам помощников.

  • getFilterPath($filter) возвращает вычисленный путь к классу фильтра, имя которого передается в качестве параметра.

  • getFilterPaths() возвращает все зарегистрированные пути к классам фильтров.

    Поддержать сайт на родительском проекте КГБ