Глава 35. Zend_View

Содержание

35.1. Введение
35.1.1. Скрипт контроллера
35.1.2. Скрипт вида
35.2. Скрипты контроллера
35.2.1. Объявление переменных
35.2.2. Выполнение скрипта вида
35.2.3. Пути к скриптам вида
35.3. Скрипты вида
35.3.1. Экранирование вывода
35.3.2. Использование других шаблонизаторов
35.4. Вспомогательные классы вида
35.4.1. Начальные вспомогательные классы
35.4.2. Пути к вспомогательным классам
35.4.3. Написание собственных вспомогательных классов

35.1. Введение

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

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

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

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

35.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() для экранирования переменных.