Отправляет email-рассылки с помощью сервиса Sendsay

PHP 5: Новые возможности.

  Все выпуски  

ZEND FRAMEWORK: Класс Zend_View


PHP 5: Новые возможности.

Класс Zend_View обеспечивает представление приложения, т. е. «видовую» часть шаблона проектирования MVC (в том числе, отделение функциональности этой части от двух других). Класс предлагает ряд вспомогательных методов, фильтров вывода и приемов обеспечения безопасности при отображении данных.

Класс позволяет работать с системами шаблонов (templates), например, Smarty, Flexy и т. п. Да и сам характер работы с классом напоминает эти системы.

Использование класса Zend_View, в общих чертах, сводится к следующим двум шагам.

Создание объекта Zend_View. Прежде всего, контроллер должен создать новый объект класса Zend_View.

$view = new Zend_View();

Назначение данных. Передача данных обеспечивается путем установки соответствующих свойств созданного объекта либо, если данные ассоциированы в массиве или другом объекте, - с помощью метода assign(). Впрочем, этот метод может работать и со скалярными данными.

$view->foo = 'Foo';
$view->bar = 'Bar';
        
$data = array('foo' => 'Foo', 'bar' => 'Bar');
$view->assign($data);
        
$data = new StdClass;
$data->foo = 'Foo';
$data->bar = 'Bar';
$view->assign($data);
        
$view->assign('foo', 'Foo');
$view->assign('bar', 'Bar');
        

Исполнение скрипта вида. После того, как все необходимые данные назначены, контроллер вызывает метод render(), который исполняет заданный скрипт вида. Результат исполнения возвращается контроллеру, а не выводится непосредственно на экран.

print $view->render('someView.php');

Путь к скрипту вида. По умолчанию скрипт вида ищется в той же директории, в которой расположен контроллер. Однако, существует возможность задавать и другие директории для поиска с помощью методов setScriptPath() и addScriptPath(). В первом случае поиск будет производиться в заданной директории. Во втором случае создается целый стек директорий для поиска, причем первой будет использована директория, добавленная последней. Устанавливать директории для поиска следует, конечно, до исполнения самого скрипта вида.

$view->setScriptPath('/path/to/application/views');

Скрипт вида исполняется «внутри» объекта Zend_View и поэтому имеет доступ к его свойствам, а именно они, как нам известно, представляют собой данные для отображения.

<?php

$foo = escape($this->foo);
$bar = escape($this->bar);

print <<<EOT
Foo: $foo
Bar: $bar
EOT;

?>
        

Как видно из примера, данные следует отображать в безопасном виде, для чего служит метод escape(). По умолчанию он использует стандартную функцию htmlspecialchars(), но при необходимости может быть использована и другая функция или метод. Для изменения поведения используется метод setEscape() (обычно это делается в контроллере).

$view->setEscape('htmlentities');
$view->setEscape(array('SomeClass', 'someMethod')); // SomeClass::someMethod()
$view->setEscape(array($obj, 'someMethod')); // $obj->someMethod()

В скрипте вида часто приходится выполнять повторные стереотипные действия. Для этого целесообразно использовать специальные классы-помощники (helpers). Существует несколько предопределенных помощников, входящих в поставку Zend Framework и предназначенных для облегчения генерации элементов HTML формы. Все эти помощники автоматически преобразуют данные в безопасную форму.

Вызов помощников производится по их имени, например: $this->formText(/*...*/). При этом создается объект соответствующего класса (в данном случае - Zend_View_Helper_FormText) и вызывается его одноименный метод (в данном случае - formText()). Этот объект продолжает существовать пока исполняется скрипт вида и при необходимости может быть использован повторно.

По умолчанию помощники ищутся в директории Zend/View/Helper/. Изменить это поведение можно с помощью методов setHelperPath() и addHelperPath().

  1. Создайте объект $view класса Zend_View и назначьте ему для отображения массив с результатами умножения числа 2 на последовательность чисел от 1 до 9. Для маркировки данных используйте индексы x1, x2, x3 и т. д.

  2. Предложите скрипт вида, который выводил бы назначенные данные (см. предыдущее задание) в виде последовательности строк 2x1 = 2, 2x2 = 4 и т. д.

  3. Чем будет отличаться поведение приложения, если использовать для установки путей поиска скрипта вида метод addScriptPath() вместо setScriptPath()?

«Ответы и решения к Глава 10, Класс Zend_View»

Created with DocBook


В избранное