#php #zend-framework #bootstrapping #zend-view
#php #zend-framework #загрузка #zend-просмотр #zend-view
Вопрос:
Я хочу поместить Zend_View в Zend_Registry, и у меня возникли проблемы с этой простой задачей. Zend_View инициализируется в application.ini как ресурс:
resources.view.encoding = "UTF-8"
resources.view.contentType = "text/html; charset=UTF-8"
resources.view.doctype = "HTML4_STRICT"
resources.view.helperPath.ZendX_JQuery_View_Helper = "ZendX/JQuery/View/Helper"
Это работает нормально, затем я хотел поместить это в реестр, добавив метод в Bootstrap.php.
protected function _initView()
{
$view = $this->getResource('view');
Zend_Registry::set('view', $view);
return $view;
}
И после обновления я получаю ошибки при инициализации представления:
Catchable fatal error: Argument 1 passed to ZendX_JQuery::enableView() must be an instance of Zend_View_Interface, null given, called in D:projektyxxxlibraryZendXApplicationResourceJquery.php on line 91 and defined in D:projektyxxxlibraryZendXJQuery.php on line 104
Что я делаю не так? Я не получал эту ошибку jQuery раньше
Комментарии:
1. Зачем вам нужно помещать ваш объект view в реестр?
2. Хорошая мысль, Вика, это разрушает идею MVC
3. @jake: Я хочу иметь почтовую программу, которая отображает тело с помощью Zend_View и отправляет его через Zend_Mailer. Что не так с этим подходом?
4. Использовать новый объект Zend_View, а не объект просмотра страницы?
Ответ №1:
Существует два разных способа инициализации ресурса: в файле application.ini и с использованием метода _init в классе bootstrap. При начальной загрузке приложения сначала выполняются методы _init, за которыми следуют ресурсы ini-файла. Итак, проблема с вашим кодом заключается в том, что при $this->getResource('view')
запуске ресурс view еще не существует, поэтому это вернет null. Затем вы помещаете это значение null в реестр, которое, предположительно, является причиной ошибки позже.
Не совсем понятно, зачем вам нужен объект view в реестре, поэтому, возможно, если бы вы могли объяснить, что мы могли бы предложить лучший подход.
Ответ №2:
Вызовите свой метод _init как-нибудь иначе … скорее всего, здесь происходит конфликт имен.
protected function _initViewInRegistry() {
// run view resource
$this->bootstrap('view');
// put view resource in registry
Zend_Registry::set('view', $this->getResource('view'));
}
Это немного некрасиво с точки зрения именования / семантики, возможно, это лучше подходит для ресурса реестра, который полностью настраивает ваш экземпляр реестра.