Zend Framework - расширить контроллер модуля
-
05-10-2019 - |
Вопрос
У меня есть следующая структура каталога:
modules/
api/
controllers/
ApiController.php
InventoryController.php
OtherController.php
Метод init () распространен среди нескольких контроллеров, поэтому я хочу ревертировать, что в класс родительского контроллера, такого как:
class Api_ApiController extends Zend_Controller_Action
{
public function init()
{
// common code
}
}
Когда я пытаюсь:
class Api_InventoryController extends Api_ApiController
Я получил:
Фатальная ошибка: класс 'API_APICONTROLLER' не найден в /aplication/modules/api/controllers/inventorycontroller.php в строке 4
Почему Zend Framework не отображает API_APICONTROLLER к модулям / API / контроллерам / apicontroller.php?
Я выяснил путь вокруг этого, надевая Apicontroller в библиотеку / и зарегистрировала пространство имен, но кажется мне взлом.
Решение
«Проблема» в том, что ZF не регистрирует каталог контроллеров в автозагрузке, поскольку регуляторы обычно загружаются через Zend_Controller_Dispatcher
. Отказ То Zend_Application_Module_Autoloader
, это создано в бутстраппере с другой стороны только регистрирует
'dbtable' => array(
'namespace' => 'Model_DbTable',
'path' => 'models/DbTable',
),
'mappers' => array(
'namespace' => 'Model_Mapper',
'path' => 'models/mappers',
),
'form' => array(
'namespace' => 'Form',
'path' => 'forms',
),
'model' => array(
'namespace' => 'Model',
'path' => 'models',
),
'plugin' => array(
'namespace' => 'Plugin',
'path' => 'plugins',
),
'service' => array(
'namespace' => 'Service',
'path' => 'services',
),
'viewhelper' => array(
'namespace' => 'View_Helper',
'path' => 'views/helpers',
),
'viewfilter' => array(
'namespace' => 'View_Filter',
'path' => 'views/filters',
)
Итак, либо вы включаете свой сценарий базового контроллера с require_once
Или вы модифицируете свой автозагрузчик, чтобы также включить каталоги контроллера.
Другие советы
Сильно редактировано. Пожалуйста, игнорируйте мой предыдущий ответ; Я неправильно прочитал вопрос. Небрежность на моей части.
Вы создали автозагрузчик в вашем загрузке? Что-то типа:
protected function _initAutoloader()
{
$autoloader = new Zend_Application_Module_Autoloader(array(
'namespace' => '',
'basePath' => APPLICATION_PATH . '/modules',
));
return $autoloader;
}