Zend Framework Modelle Standort und autoloading
-
09-10-2019 - |
Frage
Ich habe angefangen, mich in Bezug auf Zend Framework zu dokumentieren, wie ich bald beginnen wird es in der Produktion verwendet wird. Alles funktioniert gut, bis ich begann und Arbeit zu verwenden, um mit Modellen.)
Das Standardverzeichnis für die Modelle, basierend auf Zend Empfehlungen ist application/models/DbTable
, wo alle Modelle werden in geworfen werden. Diese Position zwingt mich, ein Modell wie Application_Model_DbTable_Actors
zu nennen. Für mich ist dies ein sehr langer Name für ein Modell und keine leicht zu bedienen.
Die Verzeichnisstruktur, dass ich will Aussehen erhalten, etwa wie folgt:
application/
models/
actors/
ActorsMapper.php
Actor.php
books/
BooksMapper.php
Book.php
etc.
Also alle meine Modelle werden unter dem models
Verzeichnis befinden, sondern in ihren eigenen Verzeichnissen gruppiert.
für jede Klasse Naming sollte ActorsMapper
oder Actor
sein (Sie werden beide erweitern Zend_Db_Table
oder Zend_Db_Row
).
Ich bin die Tatsache bewusst, dass in meinem Controller, wenn ich ein Modell mit so etwas wie $actors = new ActorsMapper()
instanziiert werde ich eine Fatal error: Class not found
bekommen und warum ich für Ihre Hilfe bei dieser bin gefragt.
Um dieses Problem zu lösen, habe ich versucht, mein models
Verzeichnis zum include_path hinzuzufügen:
-
erster Versuch
hinzugefügt
includePaths.models = APPLICATION_PATH "/models"
zu application.ini
, aber dies ist nicht einmal in dem Pfad enthält
-
zweiter Versuch:
explizit den Pfad mit
set_include_path(implode(PATH_SEPARATOR, array( realpath(APPLICATION_PATH . '/../library'), realpath(APPLICATION_PATH . '/models'), get_include_path(), )));
hinzugefügt
, aber auch wenn dies, dass der Pfad zu den enthaltenen diejenigen hinzufügt, der Fehler immer noch auftritt.
Ich habe diese Benennung von Modellen in der offiziellen Dokumentation gesehen die Zend_Db_Table
, aber ich kann nichts selbstladende sie im Zusammenhang finden.
Vielen Dank für alle Lösungen.
P. S. Zend Framework Version 1.11.1
Lösung
hat Zend Framework einen eingebauten Autoloader. Es funktioniert durch die Abbildung der Klassennamen in den Verzeichnisbaum, so Application_Model_Actors_Actor
werden lassen abgebildet
Application\
Models\
Actors\
Actor.php
Leider kann man das nicht ändern. Die Funktion, die Sie für suchen, ist Namespacing aber es wird nur dann unterstützt (und ist in Tatsache eines der wichtigsten Merkmale) von Zend Framework 2, die noch entwickelt wird.
Andere Tipps
Versuchen Zend_Application_Bootstrap_Bootstrap zu erweitern, dann können Sie diese ein
versuchen$ loader = $ this-> getResourceLoader ();
$ loader-> addResourceType ( 'Bücher', 'models / Bücher', 'Model_Book'); $ Loader-> addResourceType ( 'Akteure', 'models / Schauspieler', 'Model_Actor');
Ich versuche, auch diese Art der Implementierung in einem Beobachter-Muster zu implementieren.