Los autoloaders de recursos están destinados a gestionar código de librería con namespace que sigue las directrices del estándar de codificación de Zend Framework, pero que no tiene una correspondencia 1:1 entre el nombre de la clase y la estructura de directorios. Su propósito principal es facilitar el autoloading de código de recursos de la aplicación, como modelos, formularios y ACLs específicos de la aplicación.
Los autoloaders de recursos se registran con el autoloader al instanciarse, con el namespace al que están asociados. Esto le permite asignar fácilmente un namespace a código en directorios específicos, y aun así aprovechar los beneficios del autoloading.
Consideremos la siguiente estructura de directorios:
path/to/some/directory/
acls/
Site.php
forms/
Login.php
models/
User.php
Dentro de este directorio, todo el código está prefijado con el namespace "My_". Dentro del subdirectorio "acls", se añade el prefijo de componente "Acl_", dando como resultado el nombre de clase final "My_Acl_Site". De manera similar, el subdirectorio "forms" se asigna a "Form_", dando "My_Form_Login". El subdirectorio "models" se asigna a "Model_", dando "My_Model_User".
Puede usar un autoloader de recursos para cargar automáticamente estas clases. Para instanciar el autoloader de recursos, se le requiere pasar como mínimo la ruta base y el namespace para los recursos de los que será responsable:
$resourceLoader = new Zend_Loader_Autoloader_Resource(array(
'basePath' => 'path/to/some/directory',
'namespace' => 'My',
));
![]() |
Namespace base |
|---|---|
En |
Ahora que hemos configurado el autoloader de recursos base, podemos añadirle
algunos componentes para que se carguen automáticamente. Esto se hace usando el
método addResourceType(), que acepta tres
argumentos: un "tipo" de recurso, utilizado internamente como nombre de referencia;
la ruta del subdirectorio bajo la ruta base en la que residen estos
recursos; y el namespace del componente a añadir al namespace
base. Como ejemplo, añadamos cada uno de nuestros tipos de recursos.
$resourceLoader->addResourceType('acl', 'acls/', 'Acl')
->addResourceType('form', 'forms/', 'Form')
->addResourceType('model', 'models/', 'Model');
Alternativamente, podría pasar esto como un array a
addResourceTypes(); lo siguiente es equivalente a lo
anterior:
$resourceLoader->addResourceTypes(array(
'acl' => array(
'path' => 'acls/',
'namespace' => 'Acl',
),
'form' => array(
'path' => 'forms/',
'namespace' => 'Form',
),
'model' => array(
'path' => 'models/',
'namespace' => 'Model',
),
));
Finalmente, puede especificar todo esto al instanciar el objeto, simplemente indicando una clave "resourceTypes" en las opciones pasadas y una estructura como la anterior:
$resourceLoader = new Zend_Loader_Autoloader_Resource(array(
'basePath' => 'path/to/some/directory',
'namespace' => 'My',
'resourceTypes' => array(
'acl' => array(
'path' => 'acls/',
'namespace' => 'Acl',
),
'form' => array(
'path' => 'forms/',
'namespace' => 'Form',
),
'model' => array(
'path' => 'models/',
'namespace' => 'Model',
),
),
));
Zend Framework incluye una implementación concreta de
Zend_Loader_Autoloader_Resource que contiene mapeos de tipos de
recursos que cubren la estructura de directorios recomendada por defecto
para las aplicaciones MVC de Zend Framework. Este cargador,
Zend_Application_Module_Autoloader, viene con los
siguientes mapeos:
forms/ => Form
models/ => Model
DbTable/ => Model_DbTable
mappers/ => Model_Mapper
plugins/ => Plugin
services/ => Service
views/
helpers => View_Helper
filters => View_Filter
Como ejemplo, si tiene un módulo con el prefijo "Blog_", e intentó instanciar la clase "Blog_Form_Entry", buscaría en el subdirectorio "forms/" del directorio de recursos un archivo llamado "Entry.php".
Cuando se usan bootstraps de módulo con Zend_Application, se
creará por defecto una instancia de Zend_Application_Module_Autoloader
para cada módulo discreto, permitiéndole
cargar automáticamente los recursos del módulo.
![[Note]](images/note.png)