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
我得到:
致命错误:在/application/modules/api/controllers/inventorycontroller.php中找不到类'api_apicontroller'类
为什么Zend Framework不将API_APICONTROLLER映射到模块/API/Controllers/apicontroller.php?
我已经通过将apicontroller放入图书馆/注册命名空间来解决了这一问题,但对我来说似乎是一个黑客。
解决方案
“问题”是,ZF未在自动加载器中注册控制器目录,因为控制器通常通过 Zend_Controller_Dispatcher
. 。这 Zend_Application_Module_Autoloader
, ,另一方面,这是在Bootstrapper中实例化的
'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;
}
不隶属于 StackOverflow