В предлагаемом материале освещены вопросы использования класса Zend_View, а также связанные с ним классы-помощники.
Обзор
Класс Zend_View
обеспечивает представление приложения, т. е. «видовую» часть шаблона проектирования MVC (в том числе, отделение функциональности этой части от двух других). Класс предлагает ряд вспомогательных методов, фильтров вывода и приемов обеспечения безопасности при отображении данных.
Класс позволяет работать с системами шаблонов (templates), например, Smarty,
Flexy и т. п. Да и сам характер работы с классом напоминает эти системы.
Использование класса Zend_View, в общих чертах, сводится к следующим двум шагам.
Контроллер создает объект класса Zend_View и обеспечивает его данными, предназначенными для отображения.
Контроллер «говорит» объекту Zend_View
отобразить тот или иной вид, используя предназначенные для этого данные.
Скрипт контроллера
Создание объекта Zend_View. Прежде всего, контроллер должен создать новый объект класса Zend_View.
$view = new Zend_View();
Назначение данных. Передача данных
обеспечивается путем установки соответствующих свойств созданного объекта либо, если данные ассоциированы в массиве или другом объекте, - с помощью метода assign(). Впрочем, этот метод может работать и со скалярными данными.
Исполнение скрипта вида. После того, как все необходимые данные назначены, контроллер вызывает метод render(), который исполняет заданный скрипт вида. Результат исполнения возвращается контроллеру, а не выводится непосредственно на экран.
print $view->render('someView.php');
Путь к скрипту вида. По умолчанию скрипт вида ищется в той же директории, в которой расположен контроллер. Однако, существует возможность
задавать и другие директории для поиска с помощью методов setScriptPath() и addScriptPath(). В первом случае поиск будет производиться в заданной директории. Во втором случае создается целый стек директорий для поиска, причем первой будет использована директория, добавленная последней. Устанавливать директории для поиска следует, конечно, до исполнения самого скрипта вида.
Скрипт вида исполняется «внутри» объекта Zend_View и поэтому имеет доступ к его свойствам, а именно они, как нам известно, представляют собой данные для отображения.
Как видно из примера, данные следует отображать в безопасном виде, для чего служит метод escape(). По умолчанию он использует стандартную функцию htmlspecialchars(), но при необходимости может быть использована и другая функция или метод. Для изменения поведения используется метод setEscape() (обычно это делается в контроллере).
В скрипте вида часто приходится выполнять повторные стереотипные действия. Для этого целесообразно использовать специальные классы-помощники (helpers). Существует несколько предопределенных помощников, входящих в поставку Zend Framework и предназначенных для облегчения генерации элементов HTML формы. Все эти помощники автоматически преобразуют данные в безопасную форму.
formButton($name, $value, $attribs);
formCheckbox($name, $value, $attribs, $options);
formFile($name, $value, $attribs);
formHidden($name, $value, $attribs);
formPassword($name, $value, $attribs);
formRadio($name, $value, $attribs, $options);
formReset($name, $value, $attribs);
formSelect($name, $value, $attribs, $options);
formSubmit($name, $value, $attribs);
formText($name, $value, $attribs);
formTextarea($name, $value, $attribs);
Вызов помощников производится
по их имени, например: $this->formText(/*...*/). При этом создается объект соответствующего класса (в данном случае - Zend_View_Helper_FormText) и вызывается его одноименный метод (в данном случае - formText()). Этот объект продолжает существовать пока исполняется скрипт вида и при необходимости может быть использован повторно.
По умолчанию помощники ищутся в директории Zend/View/Helper/.
Изменить это поведение можно с помощью методов setHelperPath() и addHelperPath().
Контрольные вопросы и задания
Создайте объект $view класса Zend_View и назначьте ему для отображения массив с результатами умножения
числа 2 на последовательность чисел от 1 до 9. Для маркировки данных используйте индексы x1, x2, x3 и т. д.
Предложите скрипт вида, который выводил бы назначенные данные (см. предыдущее задание) в виде последовательности строк 2x1 = 2, 2x2 = 4 и т. д.
Чем
будет отличаться поведение приложения, если использовать для установки путей поиска скрипта вида метод addScriptPath() вместо setScriptPath()?