A menudo, al desarrollar una aplicación, resulta difícil empaquetar las clases en el estándar 1:1 de nombreClase:nombreArchivo recomendado por Zend Framework, o es ventajoso por motivos de empaquetado no hacerlo así. Sin embargo, esto significa que tus archivos de clase no serán encontrados por el autoloader.
Si lees los objetivos de diseño del
autoloader, el último punto de esa sección indicaba que la solución debía cubrir esta
situación. Zend Framework lo hace mediante
Zend_Loader_Autoloader_Resource.
Un recurso es simplemente un nombre que corresponde a un espacio de nombres de componente (que se añade al espacio de nombres del autoloader) y una ruta (que es relativa a la ruta base del autoloader). En la práctica, harías algo como esto:
$loader = new Zend_Application_Module_Autoloader(array(
'namespace' => 'Blog',
'basePath' => APPLICATION_PATH . '/modules/blog',
));
Una vez que tienes el loader en su lugar, necesitas informarle de los diferentes tipos de recursos de los que es consciente. Estos tipos de recursos son simplemente pares de subárbol y prefijo.
Como ejemplo, considera el siguiente árbol:
path/to/some/resources/ |-- forms/ | `-- Guestbook.php // Foo_Form_Guestbook |-- models/ | |-- DbTable/ | | `-- Guestbook.php // Foo_Model_DbTable_Guestbook | |-- Guestbook.php // Foo_Model_Guestbook | `-- GuestbookMapper.php // Foo_Model_GuestbookMapper
Nuestro primer paso es crear el cargador de recursos:
$loader = new Zend_Loader_Autoloader_Resource(array(
'basePath' => 'path/to/some/resources/',
'namespace' => 'Foo',
));
A continuación, necesitamos definir algunos tipos de recursos.
Zend_Loader_Autoloader_Resourse::addResourceType() tiene tres
argumentos: el "tipo" de recurso (una cadena arbitraria), la ruta bajo la ruta base en
la que se puede encontrar el tipo de recurso, y el prefijo de componente a usar para el tipo de recurso.
En el árbol anterior, tenemos tres tipos de recursos: form (en el subdirectorio "forms", con un
prefijo de componente "Form"), model (en el subdirectorio "models", con un prefijo de componente
"Model"), y dbtable (en el subdirectorio "models/DbTable",
con un prefijo de componente "Model_DbTable"). Los definiríamos de la siguiente
manera:
$loader->addResourceType('form', 'forms', 'Form')
->addResourceType('model', 'models', 'Model')
->addResourceType('dbtable', 'models/DbTable', 'Model_DbTable');
Una vez definidos, simplemente podemos usar estas clases:
$form = new Foo_Form_Guestbook(); $guestbook = new Foo_Model_Guestbook();
![]() |
Autocarga de recursos de módulos |
|---|---|
La capa MVC de Zend Framework fomenta el uso de "módulos", que
son aplicaciones autocontenidas dentro de tu sitio. Los módulos típicamente tienen varios
tipos de recursos por defecto, y Zend Framework incluso
recomienda una estructura de directorios estándar
para los módulos. Los autoloaders de recursos son por lo tanto
bastante útiles en este paradigma, tan útiles que están habilitados por defecto cuando
creas una clase de bootstrap para tu módulo que extiende
|
![[Note]](images/note.png)