Zend Autoloader使用命名空间来确保您没有使用autoload进程,对那些你不想要的类。所以你必须为你的类选择一个名字空间。
您可以使用特定于应用程序的命名空间或通用命名空间来启动您的类。 像'My_'或'App_'这样的命名空间是通用的,但是例如如果你的应用程序名称是Job Board,你可以在你的类文件中使用'JB_'这样的命名空间。
您也可以编写自己的自动加载器(全新的或者扩展Zend自动加载器)并将其注册为SPL autoloader以绕过此操作。
您的类名不一定要遵循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');
你实际上是告诉你有一种“服务”(第1 PARAM),这是摆在指定的目录Zend的自动装弹机'services'(第二参数),并且您在类名中使用'Service'标记来指定此类的类。
上述代码告诉Zend Autoloader在路径'APPLICATION_PATH/modules/store/services/Core.php'中搜索类Store_Service_Core。
正如你所看到的,我已经为APPLICATION_PATH路径注册了'Application'命名空间。这意味着每个以Application_开头的类都将从APPLICATION_PATH自动加载。因此,例如我有一个名为Application_Init的类,它使用了一些初始化任务,现在Zend从路径APPLICATION_PATH/Init.php中自动加载它。
Yu答案是完美的!谢谢 – 2013-05-22 11:49:44
太棒了!谢谢! – Wiktor 2014-06-14 17:53:13