Domanda

Qualcuno sa come utilizzare il "nuovo" Zend Autoloader per caricare modelle? In the Moment mia configurazione è simile al seguente:

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;
    } 

Così, quando ho posto una modella in /Models/User.php con

class Sl_Model_User{}

e creare un oggetto nuovo, tutto funziona come progettato. Ma come posso utilizzare il caricatore automatico per caricare un modello posto in /Models/Dao/UserDB.php?

class Dao_UserDB{}
È stato utile?

Soluzione

Controllare la documentazione sul Resource_Autoloader (il suo scopo è quello di caricare le risorse che si trovano nella directory di modelli o altrove - cioè al di fuori della cartella / Libreria).

"autoloader risorse sono destinate a gestire il codice della libreria namespace che seguono Zend Framework linee guida di codifica standard, ma che non hanno un 1:. Mappatura 1 tra il nome della classe e la struttura delle directory Il loro scopo primario è quello di facilitare il codice risorsa applicazione caricamento automatico , come i modelli specifici per l'applicazione, moduli e ACL.

autoloader risorse registrano con il caricatore automatico su di un'istanza, con lo spazio dei nomi a cui sono associati. Ciò consente di spazio dei nomi facilmente il codice in directory specifiche, e ancora raccogliere i frutti di caricamento automatico ".

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

));

Prova questo nel file di bootstrap:

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

Altri suggerimenti

A seconda della configurazione corrente

classfile: /Models/Dao/UserDB.php

ClassName: class Dao_UserDB {}

dovrebbe essere:

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

Ma si potrebbe anche assegnare un nome alla Classe: S1_Dao_UserDB () questo dovrebbe funzionare senza cambiare.

Per definire le regole del caricatore automatico per i modelli personalizzati (in libreria dir personalizzato) come:

|-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

Si dovrebbe aggiungere questo nel tuo 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')
        ),
    );
}

Mi ci volle un po 'per capirlo, spero che qualcuno di risparmiare tempo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top