Zend framework Zend自动加载模型问题
Zend框架。 我想在models文件夹中,从bootstrap类中自动加载我的模型类。 这些模型实际上没有使用任何名称空间(所以我有Ex.User.php文件的类User等等) 如果我理解正确,我应该使用Zend_Loader_Autoloader_资源,我尝试了:Zend framework Zend自动加载模型问题,zend-framework,namespaces,zend-autoloader,Zend Framework,Namespaces,Zend Autoloader,Zend框架。 我想在models文件夹中,从bootstrap类中自动加载我的模型类。 这些模型实际上没有使用任何名称空间(所以我有Ex.User.php文件的类User等等) 如果我理解正确,我应该使用Zend_Loader_Autoloader_资源,我尝试了: function _initLoaderResource() { $resourceLoader = new Zend_Loader_Autoloader_Resource(array(
function _initLoaderResource()
{
$resourceLoader = new Zend_Loader_Autoloader_Resource(array(
'basePath' => APPLICATION_PATH,//points to the "application" path where resides "models" folder
'namespace' =>''
));
$resourceLoader->addResourceType('models', 'models/');
}
我收到以下“Zend_Loader_Exception”消息:
'Initial definition of a resource type must include a namespace'
我的问题是:
- 这是自动加载模型的正确方法吗?
- 如何管理不遵循Zend Framework编码标准的资源代码?
$nameSpaceToPath = array(
'Application' => APPLICATION_PATH,
'Base' => APPLICATION_PATH . '/base',
'Store' => APPLICATION_PATH . '/modules/Store',
'Payment' => APPLICATION_PATH . '/modules/Payment',
'Admin' => APPLICATION_PATH . '/modules/Admin'
);
foreach($nameSpaceToPath as $ns => $path) {
$autoLoaderResource = new Zend_Loader_Autoloader_Resource(
array(
'basePath' => $path,
'namespace' => $ns
)
);
$autoLoaderResource->addResourceType('controller','controllers','Controller');
$autoLoaderResource->addResourceType('model','models','Model');
$autoLoaderResource->addResourceType('mapper','models/mappers','Model_Mapper');
$autoLoaderResource->addResourceType('service','services','Service');
// I'm using _Util_ in the name of my utility classes, I place them in 'utils' directory
$autoLoaderResource->addResourceType('util','utils','Util');
$autoLoaderResource->addResourceType('plugin','plugins','Plugin');
$autoLoaderResource->addResourceType('form','forms','Form');
// I'm using _Exception_ in the name of my module specific exception classes, I place them in 'exceptions' directory
$autoLoaderResource->addResourceType('exception','exceptions','Exception');
$autoLoader->pushAutoloader($autoLoaderResource);
}
通过调用定义资源类型时:
$autoLoaderResource->addResourceType('service','services','Service');
您实际上是在告诉Zend Autoloader您有一个类型“service”(第一个参数),它位于名为“services”(第二个参数)的目录中,并且您在类名中使用“service”标记来指定此类型的类
上面的代码告诉Zend Autoloader在路径“APPLICATION\u path/modules/Store/services/Core.php”中搜索类Store\u Service\u Core
如您所见,我已为应用程序路径注册了通用“应用程序”命名空间。这意味着从Application_u开始的每个类都将从Application_u路径自动加载。例如,我有一个名为Application_Init的类,它使用了一些初始化任务,现在Zend从路径Application_path/Init.php自动加载它。实际上,您可能不想为此使用资源自动加载程序,因为(正如您所发现的)它需要一个命名空间。标准自动加载器(从包含路径加载模型)有一个选项
setFallbackAutoloader
,该选项告诉ZF,该自动加载器应用于与另一个命名空间不匹配的任何类。因此,您需要做的就是确保您的models目录位于include路径上,并将此选项设置为true
您可能已经在使用标准自动加载程序加载Zend类,因此您可能需要修改application.ini文件,将模型目录添加到include路径,然后在application.ini或引导类中设置回退选项:
protected function _initAutoloader()
{
$autoloader = Zend_Loader_Autoloader::getInstance();
$autoloader->setFallbackAutoloader(true);
return $autoloader;
}
你的答案是完美的!!谢谢