Создание собственного объекта View с Zend_Application
Предположим, что вам необходимо создать свой объект вила (view) в приложении Zend Framework. О том, как правильно это сделать, узнаете в этом уроке.
Создайте новый файл library/App/View.php:1 class App_View extends Zend_View
2 {
3 // custom methods here
4 }
Так же не забудьте добавить пространство имён App_ в application.ini:1 autoloadernamespaces[] = "App_"
Всё, что нам необходимо сделать так это сообщить Zend_Application, о том, что у нас есть свой собственный класс. Это может быть реализовано двумя путями: непосредственно в Bootstrap.php или предварительно создав отдельный ресурс.
_initView() в Bootstrap.php
На первый взгляд тут всё довольно-таки просто. В application/Bootstrap.php, мы добавили наш собственный метод, который создаёт объект вида:01 class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
02 {
03 protected function _initView()
04 {
05 $view = new App_View();
06
07 $viewRenderer = new Zend_Controller_Action_Helper_ViewRenderer();
08 $viewRenderer->setView($view);
09 Zend_Controller_Action_HelperBroker::addHelper($vi ewRenderer);
10 return $view;
11 }
12 }
Данный метод мы назвали _initView() для того, чтобы он заменил собой уже существующий метод. Однако такой способ приведёт к тому, что данные вида resources.что-то из application.ini будут полностью игнорироваться, так что введём несколько изменений:01 class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
02 {
03 protected function _initView()
04 {
05 $resources = $this->getOption('resources');
06 $options = array();
07 if (isset($resources['view'])) {
08 $options = $resources['view'];
09 }
10 $view = new App_View($options);
11
12 if (isset($options['doctype'])) {
13 $view->doctype()->setDoctype(strtoupper($options['doctype']));
14 if (isset($options['charset']) && $view->doctype()->isHtml5()) {
15 $view->headMeta()->setCharset($options['charset']);
16 }
17 }
18 if (isset($options['contentType'])) {
19 $view->headMeta()->appendHttpEquiv('Content-Type', $options['contentType']);
20 }
21
22 $viewRenderer = new Zend_Controller_Action_Helper_ViewRenderer();
23 $viewRenderer->setView($view);
24 Zend_Controller_Action_HelperBroker::addHelper($vi ewRenderer);
25 return $view;
26 }
27
28 }
Данная версия функции принимает во внимание ресурсы из application.ini и очень похожа на встроенную функциональность, которую предоставляет Zend Framework.
Собственные ресурсы
Теперь самое время переопределить Zend_Application_Resource_View нашим ресурсам вида. Для этого создадим класс App_Resource_View и расположим его в library/App/Resource/View.php. Всё, что нам нужно, так это переопределить метод getView():01 class App_Resource_View extends Zend_Application_Resource_View
02 {
03 public function getView()
04 {
05 if (null === $this->_view) {
06 $options = $this->getOptions();
07 $this->_view = new App_View($options);
08
09 if (isset($options['doctype'])) {
10 $this->_view->doctype()->setDoctype(strtoupper($options['doctype']));
11 if (isset($options['charset']) && $this->_view->doctype()->isHtml5()) {
12 $this->_view->headMeta()->setCharset($options['charset']);
13 }
14 }
15 if (isset($options['contentType'])) {
16 $this->_view->headMeta()->appendHttpEquiv('Content-Type', $options['contentType']);
17 }
18 }
19 return $this->_view;
20 }
21 }
Для того, чтобы заставить Zend_Application загрузить наш собственный ресурс просто добавьте данную строку application.ini:1 pluginPaths.App_Resource = "App/Resource"