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

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top