2009-08-11 4 views
2

Est-ce que quelqu'un sait comment utiliser le "nouveau" chargeur automatique Zend pour charger des modèles? Dans le moment, ma configuration ressemble à ceci:Utiliser Zend_Autoloader pour les modèles

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

Alors, quand je place un modèle /Models/User.php avec

class Sl_Model_User{} 

et de créer un nouvel objet, tout fonctionne comme conçu. Mais comment puis-je utiliser l'autochargeur pour charger un modèle placé dans /Models/Dao/UserDB.php?

class Dao_UserDB{} 

Répondre

7

Consultez la documentation sur le Resource_Autoloader (son but est de charger des ressources qui se trouvent dans le répertoire des modèles ou ailleurs - i.e. en dehors du dossier/bibliothèque). «Les autochargeurs de ressources sont conçus pour gérer le code de bibliothèque à espaces de noms qui suit les directives standard de codage Zend Framework, mais qui n'ont pas de correspondance 1: 1 entre le nom de classe et la structure de répertoires. Les chargeurs automatiques de ressources s'enregistrent avec l'autochargeur à l'instanciation, avec l'espace de noms auquel ils sont associés, ce qui vous permet de facilement écrire du code d'espace de noms dans des répertoires spécifiques, et de récolter encore des données. les avantages de l'autoloading. "

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

));

Essayez ceci dans votre fichier 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' 
     ) 
    )); 
} 
+0

Bonjour, et où charger le Resourceloader?ou puis-je l'ajouter au chargeur de module? – opHASnoNAME

+0

Essayez ceci dans votre fichier boostrap fonction _initLoaderResource protégée() \t { \t $ ResourceLoader = new Zend_Loader_Autoloader_Resource (array ('basePath' => 'path/to/application', \t \t \t 'namespace' => ' MyNameSpace ' \t \t)); $ resourceLoader-> addResourceTypes ( array ('modèle' => array ( \t \t \t \t 'namespace' => 'Modèle', \t \t \t \t 'path' => 'modèles' \t \t \t) \t \t)); \t} – Andreas

1

En fonction de votre configuration actuelle

ClassFile: /Models/Dao/UserDB.php

ClassName: classe Dao_UserDB {}

devrait être:

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

Mais vous pourriez également nommer la classe: S1_Dao_UserDB() cela devrait fonctionner sans changer.

0

Pour définir des règles de autochargeur pour les modèles personnalisés (dans la bibliothèque personnalisée dir) comme:

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

Vous devez ajouter dans votre 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') 
     ), 
    ); 
} 

m'a pris un certain temps pour le comprendre J'espère que cela fera gagner du temps à quelqu'un.

Questions connexes