modèles cadres zend emplacement et autoloading
-
09-10-2019 - |
Question
J'ai commencé à me documenter au sujet de Zend Framework comme je vais commencer bientôt l'utiliser dans la production. Tout fonctionnait bien, jusqu'à ce que je commencé à utiliser et à travailler avec des modèles.)
L'emplacement par défaut pour les modèles, en fonction des recommandations Zend, est application/models/DbTable
, où tous les modèles seront jetés. Ce forces de l'emplacement m'en nommer un modèle comme Application_Model_DbTable_Actors
. Pour moi, c'est un nom très long pour un modèle et pas facile à utiliser un.
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.
Attribution d'un nom pour chaque classe doit être ActorsMapper
ou Actor
(Ils seront tous les deux ou étendre Zend_Db_Table
Zend_Db_Row
).
Je suis conscient du fait que, dans mes contrôleurs si j'instancier un modèle en utilisant quelque chose comme $actors = new ActorsMapper()
je vais obtenir un Fatal error: Class not found
et pourquoi je demande votre aide à ce sujet.
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'ajoute même pas à l'include_path
-
deuxième essai:
explicitement ajouté le chemin 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 encore.
Je l'ai vu cette appellation des modèles dans le documentation officielle du Zend_Db_Table
, mais je ne pouvais pas trouver tout ce qui concerne les autoloading.
Merci à tous pour toutes les solutions.
p.s. version zend framework est 1.11.1
La solution
Zend Framework a une construction en autochargeur. Il fonctionne en traçant le nom de classe à l'arborescence des répertoires, donc Application_Model_Actors_Actor
va se mappé à
Application\
Models\
Actors\
Actor.php
Malheureusement, vous ne pouvez pas changer cela. La fonctionnalité que vous recherchez est espace de nommage, mais il est pris en charge (et est en fait l'une des principales caractéristiques) de Zend Framework 2 qui est en cours d'élaboration.
Autres conseils
Essayez d'étendre Zend_Application_Bootstrap_Bootstrap vous pouvez essayer un
$ loader = $ this-> getResourceLoader ();
$ loader-> addResourceType ( 'modèles / livres' 'livres',, 'Model_Book'); $ Loader-> addResourceType ( 'acteurs', 'modèles / acteurs', 'Model_Actor');
Je tente aussi de mettre en œuvre ce type de mise en œuvre dans un modèle d'observateur.