2.4 Автозагрузка в Zend Framework. Ресурс Autoloading |
- Statistics
- Participants
- Translate into Russian
- Translation result
- Translation complete.
Часто, при разработке приложений, бывает довольно сложно оформить класс, что бы он 1:1 соответствовал имя_класса:имя_файла, (согласно рекомендациям Zend Framework), либо бывает выгодно этого не делать. Однако, это приведет к тому, что ваши файлы классов не будут найдены автозагрузчиком.
Если вы прочли «Цели и архитектура» автозагрузчика, то знаете, что в последнем пункте этого раздела обозначено, что решение должно покрывать такую ситуацию. В Zend Framework это достигается с помощью Zend_Loader_Autoloader_Resource.
Ресурс — это только имя, которое соответствует пространству имен компонента (которое добавляется к пространству имен автозагрузчика) и путь (который является относительным к базовому пути автозагрузчика). На практике вы будете делать нечто подобное:
01. $loader = new Zend_Application_Module_Autoloader(array(
02. 'namespace' => 'Blog',
03. 'basePath' => APPLICATION_PATH . '/modules/blog',
04. ));
Когда загрузчик определен, вы должны сообщить ему о различных типах ресурсов, о которых он должен знать. Эти типы ресурсов являются простыми парами, состоящими из поддерева и префикса.
В качестве примера рассмотрим следующее дерево:
01. path/to/some/resources/
02. |-- forms/
03. | `-- Guestbook.php // Foo_Form_Guestbook
04. |-- models/
05. | |-- DbTable/
06. | | `-- Guestbook.php // Foo_Model_DbTable_Guestbook
07. | |-- Guestbook.php // Foo_Model_Guestbook
08. | `-- GuestbookMapper.php // Foo_Model_GuestbookMapper
Первый шаг — создание загрузчика ресурсов:
01. $loader = new Zend_Loader_Autoloader_Resource(array(
02. 'basePath' => 'path/to/some/resources/',
03. 'namespace' => 'Foo',
04. ));
Затем нужно определить несколько типов ресурсов.
Zend_Loader_Autoloader_Resourse::addResourceType() имеет три аргумента: «тип» ресурса (произвольная строка), путь относительно базового пути, по которому тип ресурса может быть найден, и префикс компонента для пользования типа ресурса. В вышеуказанном дереве, имеется три типа ресурсов: form (в поддиректории «forms», с префиксом компонента «Form»), model (в поддиректории «models», с префиксом компонента «Model») и dbtable (в поддиректории «models/DbTable», с префиксом компонента «Model_DbTable»). Мы определим их следующим образом:
01. $loader->addResourceType('form', 'forms', 'Form')
02. ->addResourceType('model', 'models', 'Model')
03. ->addResourceType('dbtable', 'models/DbTable', 'Model_DbTable');
После определения, можно просто использовать эти классы:
01. $form = new Foo_Form_Guestbook();
02. $guestbook = new Foo_Model_Guestbook();
Примечание: Автозагрузка ресурсов модулей
MVC в Zend Framework поощряет использование «модулей», которые являются независимыми (автономными) приложениями внутри вашего сайта. Модули обычно имеют несколько типов ресурсов по умолчанию, и Zend Framework рекомендует стандартную структуру директорий для модулей. Поэтому автозагрузчик ресурсов является достаточно полезным в этой парадигме — настолько полезными, что они включены по умолчанию, когда вы создаете класс загрузчика (bootstrap class) для вашего модуля, который расширяет Zend_Application_Module_Bootstrap. Чтобы получить больше информации, прочтите документацию по Zend_Loader_Autoloader_Module.
Original (English): Autoloading in Zend Framework. Resource Autoloading
