Zend: Где/как я могу зарегистрировать специальные помощники вида?
В моем файле layout.phtml
у меня есть:
<?php echo $this->Test(); ?>
Я создал помощник Test view в application/views/helpers/Test.php
<?php
class My_View_Helper_Test extends Zend_View_Helper_Abstract {
public function Test() {
return 'test';
}
}
И мой файл конфигурации @ configs/application.ini
:
resources.view[] = ''
resources.view.helperPath = APPLICATION_PATH "/views/helpers"
Ошибка:
Zend_Loader_PluginLoader_Exception: Плагин по имени "Тест" не найден в реестра; используемые пути: Zend_View_Helper_: Zend/View/Helper/:./views/helpers/in /usr/share/php/Zend/Loader/PluginLoader.php в строке 406
В аналогичной заметке я не могу зарегистрировать помощник для просмотра admin...
resources.view.helperPath.Admin_View_Helper = APPLICATION_PATH "/modules/admin/views/helpers"
Мой modules/admin/views/helpers/AdminPanel.php
:
<?php
class My_View_Helper_AdminPanel extends Zend_View_Helper_Abstract {
public function AdminPanel() { return 'test'; }
}
У меня нет выбора, кроме как сделать это в Bootstrap с помощью addHelperPath? Если бы кто-нибудь мог продемонстрировать, как я буду использовать мои пути?
Ответы
Ответ 1
Использование application.ini
, вероятно, лучший способ их определить. Я помещал все мои помощники вида в свою библиотечную папку:
includePaths.library = APPLICATION_PATH "/../library"
autoloadernamespaces.0 = "SNTrack_"
; -- Note, these are the only resources.view lines I have...
resources.view.doctype = "XHTML1_STRICT"
resources.view.helperPath.SNTrack_View_Helper = APPLICATION_PATH "/../library/SNTrack/View/Helper"
Структура каталогов:
/
application/
library/
SNTrack/
View/
Helper/
Test.php
Вид:
$this->test('test')
SNTrack/View/Helper/test.php:
class SNTrack_View_Helper_Test extends Zend_View_Helper_Abstract {
public function test($args) { return $args; }
}
Ответ 2
в моем бутстрапе:
$view = new Zend_View();
$view->addHelperPath(DE_Config::get('DE_appDir').DIRECTORY_SEPARATOR.'lib'.DIRECTORY_SEPARATOR.'DE'.DIRECTORY_SEPARATOR.'View'.DIRECTORY_SEPARATOR.'Helper'.DIRECTORY_SEPARATOR, 'DE_View_Helper');
$viewRenderer = new Zend_Controller_Action_Helper_ViewRenderer();
$viewRenderer->setView($view);
Zend_Controller_Action_HelperBroker::addHelper($viewRenderer);
Ответ 3
У меня просто была эта точная проблема, и я понял, что это связано с проблемой в моей начальной загрузке: я определял и использовал новый объект Zend_View в одной из своих функций _init, что, по-моему, переписывало все мои другие параметры представления из обоих мой загрузочный файл и мой файл application.ini(включая мое определение resource.view.helperPath). Оскорбительный код был вслепую скопирован из здесь и помещен в функцию _initJQuery() в моей начальной загрузке, которая выглядела так:
protected function _initJQuery() {
$view = new Zend_View();
$view->addHelperPath('ZendX/JQuery/View/Helper/', 'ZendX_JQuery_View_Helper');
$viewRenderer = new Zend_Controller_Action_Helper_ViewRenderer();
$viewRenderer->setView($view);
Zend_Controller_Action_HelperBroker::addHelper($viewRenderer);
}
Решением было заменить первую строку ($ view = new Zend_View()) следующим образом:
$this->bootstrap('view');
$view = $this->getResource('view');
Еще одна вещь, которую нужно учитывать в отношении вашей линии:
resources.view.helperPath = APPLICATION_PATH "/views/helpers"
Обратите внимание, что это только регистрирует путь, а не префикс класса, поэтому это будет работать, только если классы-помощники имеют префикс класса Zend по умолчанию Zend_View_Helper, то есть Zend_View_Helper_Test. Если вы хотите, чтобы класс был My_View_Helper_Test, вам нужно сделать это:
resources.view.helperPath.My_View_Helper = APPLICATION_PATH "/views/helpers"