Помощники действий 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 и создаст для вас экземпляр и вернет его.

Другие вопросы по тегам