Pregunta

¿Alguien sabe cómo utilizar el "nuevo" Zend cargador automático para cargar modelos? En el momento en que mi configuración es el siguiente:

application.ini

# Autoloader Namespace
autoloadernamespaces.0 = "Sl_"

Bootstrap.php

   /**
     * Start Autoloader
     *
     * @access protected
     * @return Zend_Application_Module_Autoloader
     */
    protected function _initAutoload()
    {
        $autoloader = new Zend_Application_Module_Autoloader(array(
            'namespace' => 'Sl_',
            'basePath'  => dirname(__FILE__),
        ));

        return $autoloader;
    } 

Así que cuando coloco un modelo en /Models/User.php con

class Sl_Model_User{}

y crear un objeto nuevo, todo funciona como diseñado. Pero, ¿cómo puedo usar el cargador automático para cargar un modelo colocado en /Models/Dao/UserDB.php?

class Dao_UserDB{}
¿Fue útil?

Solución

Consulte la documentación sobre la Resource_Autoloader (su propósito es cargar los recursos que residen en el directorio de modelos o en otro lugar - es decir fuera de la carpeta / Library).

"cargadores automáticos de recursos son destinados al manejo de código de la biblioteca de espacio de nombres que siguen Zend Framework codificación de las directrices estándar, pero que no tienen una relación 1:. Mapeo 1 entre el nombre de la clase y la estructura de directorios Su propósito principal es facilitar el código de recurso de aplicación de carga automática , tales como modelos específicos de la aplicación, las formas y las ACL.

Los cargadores automáticos de recursos se registran con el cargador automático de creación de instancias, con el espacio de nombres a los que están asociados. Esto le permite fácilmente el código de espacio de nombres en un directorio específico, y aún así obtener los beneficios de la auto-carga ".

path/to/some/directory/
    acls/
         Site.php
    forms/
        Login.php
    models/
        User.php


$resourceLoader = new Zend_Loader_Autoloader_Resource(array(
'basePath'  => 'path/to/some/directory',
'namespace' => 'My',

));

$resourceLoader->addResourceTypes(array(
'acl' => array(
    'path'      => 'acls/',
    'namespace' => 'Acl',
),
'form' => array(
    'path'      => 'forms/',
    'namespace' => 'Form',
),
'model' => array(
    'path'      => 'models/',
),

));

Trate esto en su archivo boostrap:

protected function _initLoaderResource()
{
    $resourceLoader = new Zend_Loader_Autoloader_Resource(array(
        'basePath'  => 'your_doc_root' . '/application',
        'namespace' => 'MyNamespace'
    ));
    $resourceLoader->addResourceTypes(array(
        'model' => array(
            'namespace' => 'Model',
            'path'      => 'models'
        )
    ));
}

Otros consejos

En función de su configuración actual

archivo de clase: /Models/Dao/UserDB.php

Nombre de clase: Dao_UserDB clase {}

debería ser:

$autoloader = new Zend_Application_Module_Autoloader(array(
    'namespace' => 'Dao_',
    'basePath'  => APPLICATION_ROOT.'/Models/Dao/',
));

Pero también se puede nombrar la Clase: S1_Dao_UserDB () esto debería funcionar sin cambiar.

Para definir las reglas del cargador automático para modelos personalizados (en la biblioteca personalizada dir) como:

|-application
|-library
  |-Foo
    |-Models
      |-Bar.php (holds Foo_Model_Bar class - mind no 's' in class name)
    |-Forms 
      |-Bar.php (holds Foo_Form_Bar class - mind no 's' in class name)
  |-Zend
|-public
|-test

Usted debe agregar esto en su Bootstrap.php

/**
 * Enable loading custom  classes
 */
public function _initAutoloaders()
{
    $resourceLoader = new Zend_Loader_Autoloader_Resource(array(
        'basePath' => APPLICATION_PATH . '/../library/Foo',
        'namespace' => 'Foo_'
    ));

    $resourceLoader->addResourceTypes(array(
        'foomodels' => array(
            'namespace' => 'Model_',
            'path' => 'Models')
        ),
        'fooforms' => array(
            'namespace' => 'Form_',
            'path' => 'Forms')
        ),
    );
}

Me tomó un tiempo para averiguarlo, espero que ahorra tiempo de alguien.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top