TigerZF
🌐Español

42.3. Autoloaders de recursos

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.

42.3.1. Uso del autoloader de recursos

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',
));
[Note] Namespace base

En Zend_Loader_Autoloader, se espera que proporcione el guion bajo ("_") final en su namespace si su autoloader lo va a usar para hacer coincidir el namespace. Zend_Loader_Autoloader_Resource asume que todo el código que está cargando automáticamente usará un separador de guion bajo entre namespaces, componentes y clases. Como resultado, no necesita usar el guion bajo final al registrar un autoloader de recursos.

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',
        ),
    ),
));

42.3.2. El autoloader de recursos de módulo

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.

42.3.3. Uso de autoloaders de recursos como fábricas de objetos

42.3.4. Referencia del autoloader de recursos