2010-12-14 68 views
3

J'ai commencé à me documenter sur Zend Framework car je vais bientôt commencer à l'utiliser en production. Tout fonctionnait bien, jusqu'à ce que je commence à utiliser et travailler avec des modèles :). L'emplacement par défaut pour les modèles, basé sur les recommandations Zend, est application/models/DbTable, où tous les modèles seront jetés. Cet emplacement me force à nommer un modèle comme Application_Model_DbTable_Actors. Pour moi, c'est un nom très long pour un modèle et pas un facile à utiliser.zend framework models location et chargement automatique

La structure du répertoire que je veux obtenir ressemble à quelque chose comme ceci:

application/ 
    models/ 
    actors/ 
     ActorsMapper.php 
     Actor.php 
    books/ 
     BooksMapper.php 
     Book.php 

etc.

Alors tous mes modèles résidera dans le répertoire models, mais regroupés dans leurs propres répertoires.

Le nom de chaque classe doit être ActorsMapper ou Actor (ils s'étendront tous les deux Zend_Db_Table ou Zend_Db_Row). Je suis conscient du fait que dans mes contrôleurs si j'instancie un modèle en utilisant quelque chose comme $actors = new ActorsMapper() j'obtiendrai un Fatal error: Class not found et c'est pourquoi je demande votre aide avec ceci.

Pour résoudre ce problème, j'ai essayé d'ajouter mon répertoire models à l'include_path:

  • premier essai

    ajouté includePaths.models = APPLICATION_PATH "/models" à application.ini

mais celui-ci n » t même l'ajouter à la voie d'inclusion

  • deuxième essai:

    ajouté le chemin explicitement en utilisant set_include_path(implode(PATH_SEPARATOR, array( realpath(APPLICATION_PATH . '/../library'), realpath(APPLICATION_PATH . '/models'), get_include_path(), )));

mais même si cela ajoute ce chemin parmi ceux inclus, l'erreur persiste.

J'ai vu cette dénomination de modèles dans le official documentation du Zend_Db_Table, mais je n'ai pas pu trouver quelque chose lié à leur chargement automatique.

Merci à tous pour toutes les solutions.

p.s. La version du framework zend est 1.11.1

+0

Vous devez creuser dans l'autoloader et l'étendre pour reconnaître ce répertoire structre et espace de noms. Sinon, vous êtes lié à la manière zend. –

+0

ok, donc il semble que ce soit le seul moyen. Merci! – misterjinx

Répondre

0

Zend Framework dispose d'une version intégrée de l'autochargeur. Il fonctionne en traçant le nom de classe à l'arborescence des répertoires, donc Application_Model_Actors_Actor va se mappée à

Application\ 
Models\ 
    Actors\ 
    Actor.php 

Malheureusement, vous ne pouvez pas changer cela. La fonctionnalité que vous recherchez est namespacing mais elle est uniquement prise en charge (et est en fait l'une des fonctionnalités principales) de Zend Framework 2 qui est encore en cours de développement.

+0

merci pour votre réponse. donc il n'y a vraiment aucun autre moyen de changer cela? il est très inutilisable de travailler avec des modèles comme 'Application_Model_Actors_Actors': - misterjinx

+0

Autant que je sache, la seule façon de raccourcir le nom serait de changer la structure de votre répertoire. – mrwooster

+1

Ou en étendant/modifiant l'autochargeur zend pour faire ce dont vous avez besoin. –

0

Essayez d'étendre Zend_Application_Bootstrap_Bootstrap alors vous pouvez essayer un

$ loader = $ this-> getResourceLoader();

$ loader-> addResourceType ('livres', 'modèles/livres', 'Model_Book'); $ loader-> addResourceType ('acteurs', 'models/actors', 'Model_Actor'); J'essaie également de mettre en œuvre ce type de mise en œuvre dans un modèle d'observateur.