#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 / … чтобы заставить автозагрузчики ресурсов работать — но я передавал полный путь и полный префикс вместо того, чтобы нравится то, что вы опубликовали.