Помощники действий Zend Framework
Я довольно новичок в помощниках действий Zend Framework, и я пытаюсь использовать их безуспешно (я прочитал кучу постов о помощниках действий, в том числе http://devzone.zend.com/article/3350 и не нашел решения примерно за 8 часов). Я использовал Zend Tool для настройки моего проекта, и имя помощника - Action_Helper_Common. Независимо от того, что я делаю, я получаю следующую ошибку "Неустранимая ошибка: класс 'Action_Helper_Common' не найден". В настоящее время у меня настроены такие вещи:
- zf версия: 1.11.3
- имя помощника: Action_Helper_Common
- расположение помощников: /application/controllers/helpers/Common.php
В Bootstrap.php у меня есть следующая функция:
protected function _initActionHelpers() {
Zend_Controller_Action_HelperBroker::addPath(APPLICATION_PATH . '/controllers/helpers', 'Action_Helper');
Zend_Controller_Action_HelperBroker::addHelper(
new Action_Helper_Common(null, $session)
);
}
Я также попытался это безуспешно (это было определено в Bootstrap.php до _initActionHelpers):
protected function _initAutoloader() {
$moduleLoader = new Zend_Application_Module_Autoloader(array(
'namespace' => '',
'basePath' => APPLICATION_PATH . '/controllers/helpers'));
return $moduleLoader;
}
Так что я делаю не так?!?! PLZ помогите, я в отчаянии и собираюсь сдаться:)
3 ответа
Вы получили ошибку, потому что вы не настроили автозагрузчик для Action_Helper_*
Хелпер-брокер использует загрузчик плагинов для загрузки хелперов на основе указанных вами путей и префиксов. Вот почему::getHelper() может найти вашего помощника
По какой-то причине следующая строка не сработала и для меня:
Zend_Controller_Action_HelperBroker::addHelper( new Action_Helper_Common() );
Я просто продолжаю получать сообщение об ошибке "Класс не найден" каждый раз, когда я явно создаю новый вспомогательный объект.
Это то, что работает для меня:
Zend_Controller_Action_HelperBroker::getHelper('Common');
В этом случае новый Action_Helper_Common
объект создается и регистрируется Helper Broker
,
Хотя не уверен, что это работает для вас, так как у вас есть параметризованный конструктор.
Вам не нужно делать (так что удалите его)
Zend_Controller_Action_HelperBroker::addHelper(
new Action_Helper_Common(null, $session)
); ,
так как вы уже сделали
Zend_Controller_Action_HelperBroker::addPath(APPLICATION_PATH . '/controllers/helpers', 'Action_Helper');
когда ты будешь делать
$myhelper = $this->getHelper('Common');
в вашем контроллере zf будет искать в каталоге /controllers/helpers/ имя класса Action_Helper_Common и создаст для вас экземпляр и вернет его.