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