Zend Autoloader использует пространства имен, чтобы убедиться, что вы не используете процесс автозагрузки для тех классов, которые вам не нужны.Поэтому вам нужно будет выбрать пространство имен для ваших классов.
Вы можете начать свои классы с пространства имен, специфичного для приложения, или общего.Пространства имен, такие как «My_» или «App_», являются общими, но, например, если ваше приложение называется Job Board, вы можете использовать пространства имен, такие как «JB_», в своих файлах классов.
Вы также можете написать свой собственный автозагрузчик (либо совершенно новый, либо путем расширения автозагрузчика Zend) и зарегистрируйте его как автозагрузчик SPL , чтобы обойти это.
Ваши имена классов не должны следовать соглашениям об именах 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Автозагрузчик, у вас есть тип 'service' (1-й параметр), который находится в каталоге с именем 'services' (2-й параметр), и вы используете маркер ' Service ' в именах классов для указания классовэтого типа.
Приведенный выше код сообщает Zend Autoloader о поиске класса Store_Service_Core по пути 'APPLICATION_PATH / modules / store / services / Core.php'.
Как видите, у меня естьзарегистрировал общее пространство имен «Приложение» для пути APPLICATION_PATH.Это означает, что каждый класс, начиная с Application_, будет автоматически загружаться из APPLICATION_PATH.Например, у меня есть класс с именем Application_Init, который использует некоторые задачи инициализации, и теперь Zend автоматически загружает его из пути APPLICATION_PATH / Init.php.