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

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top