如何在模块路径上的自定义目录中自动加载一个类。我的应用程序的结构如下所示
application
|_ modules
|_admin
|_api
| |_Core.php
|_elements
|_Dialog.php
我有两个自定义目录,'api'和'elements',当我实例化那两个类的对象时,我收到了错误消息:'找不到致命错误类Admin_Api_Core'。我尝试使用registerNamespace但它根本不起作用
Zend_Loader_Autoloader::getInstance()->registerNamespace('Admin_');
答案 0 :(得分:3)
查看ZF Resource Autoloaders。
将以下内容添加到Bootstrap.php
protected function _resourceLoader()
{
$resourceLoader = new Zend_Loader_Autoloader_Resource(array(
'basePath' => 'APPLICATION_PATH',
'namespace' => '',
'resourceTypes' => array(
'acl' => array(
'path' => 'api/',
'namespace' => 'Acl',
),
'form' => array(
'path' => 'elements/',
'namespace' => 'Element',
),
),
));
}
Api_Core加载APPLICATION_PATH . '/api/Core.php
Element_Core加载APPLICATION_PATH . '/elements/Core.php
Admin_Api_Core加载APPLICATION_PATH . '/modules/admin/api/Core.php
Admin_Element_Core加载APPLICATION_PATH . '/modules/admin/elements/Core.php
答案 1 :(得分:1)
您可以在Module_Bootstrap中配置自动加载(几乎与Benjamin Cremer的答案相同,但基于模块)。 要做到这一点 - 使用以下内容在/ modules / admin文件夹中创建文件Bootstrap.php:
class Admin_Bootstrap extends Zend_Application_Module_Bootstrap
{
protected function _initAutoload()
{
$resourceLoader = new Zend_Loader_Autoloader_Resource(array(
'basePath' => realpath(dirname(__FILE__)),
'namespace' => 'Admin',
'resourceTypes' => array(
'api' => array(
'path' => 'api/',
'namespace' => 'Api'
)
)
));
$autoloader = new Zend_Application_Module_Autoloader(array(
'namespace' => 'Admin',
'basePath' => dirname(__FILE__),
'resourceloader' => $resourceLoader
));
return $autoloader;
}
}
之后,您将能够实例化Admin_Api_Core类等(您应该指定所有resoursTypes)。如果你有很多模块,你可以为所有模块创建这样的引导。