Помощники действий Zend не загружаются через Action HelperBroker

#php #zend-framework

#php #zend-framework

Вопрос:

В моем модуле bootstrap:

 <?php

class Api_Bootstrap extends Zend_Application_Module_Bootstrap
{
    protected function _initAllowedMethods()
    {
        $front = Zend_Controller_Front::getInstance();
        $front->setParam('api_allowedMethods', array('POST'));
    }

    protected function _initActionHelperBrokers()
    {
        Zend_Controller_Action_HelperBroker::addPath(APPLICATION_PATH . '/modules/api/controllers/helpers', 'Api_Controller_Action_Helper_');

        Zend_Controller_Action_HelperBroker::addHelper(new Api_Controller_Action_Helper_Model());
    }
}
  

Существует Api_Controller_Action_Helper_Model на /var/www/project/application/modules/api/controller/helpers/Model.php

Но я получаю:

 PHP Fatal error:  Class 'Api_Controller_Action_Helper_Model' not found in /var/www/accounts.amh.localhost/application/modules/api/Bootstrap.php on line 15
  

Насколько я могу судить по API и http://akrabat.com/zend-framework/using-action-helpers-in-zend-framework / это должно сработать.

Я почти уверен, что это не проблема с начальной загрузкой, как у меня было раньше, поскольку я специально добавляю путь / префикс прямо перед попыткой добавить помощника.

Что еще я мог пропустить?

Комментарии:

1. просто из любопытства, в какой строке вашего bootstrap находится метод _initActionHelperBrokers ?

2. привет — я добавил загрузочный модуль целиком

3. попробуйте Zend_Controller_Action_HelperBroker::addHelper(‘Модель’); у вас проблема с автозагрузчиками. вот почему «новый Api_Controller_Action_Helper_Model()» не работает. Но когда вы указываете только имя помощника, ZF должен использовать вспомогательный путь, чтобы найти его.

4. Argument 1 passed to Zend_Controller_Action_HelperBroker::addHelper() must be an instance of Zend_Controller_Action_Helper_Abstract, string given, called in /var/www/accounts.amh.localhost/application/modules/api/Bootstrap.php on line 14 — в API ничего не говорится о возможности передачи строки этому методу…

5. попробуйте переименовать класс только в «Api_Controller_Helper_Model()», чтобы вы могли сэкономить на добавлении собственного загрузчика resourcetype.

Ответ №1:

Проблема здесь в том, что автозагрузчик модуля не знает о ресурсах помощника действий контроллера.

Попробуйте что-то подобное в вашем модуле bootstrap

 protected function _initResourceLoader()
{
    $resourceLoader = $this->getResourceLoader();

    $resourceLoader->addResourceType('actionhelper',
            'controllers/helpers', 'Controller_Action_Helper');
}
  

Все это, как говорится, поскольку у вашего помощника пустой конструктор, вы могли бы опустить addHelper() строку и просто позволить брокеру автоматически создавать ее по запросу в ваших контроллерах, например

 $helper = $this->getHelper('Model');
  

Комментарии:

1. Спасибо — я пытался следовать и изменять framework.zend.com/manual/en / … чтобы заставить автозагрузчики ресурсов работать — но я передавал полный путь и полный префикс вместо того, чтобы нравится то, что вы опубликовали.