Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [ZendFramework][ZF] Auoloader i library w modułach
Forum PHP.pl > Forum > PHP > Frameworki
VegetaSSJ
Witam, pytanie związane jest z mechanizmem autoloadu w Zendzie.

Mam taką strukturę aplikacji w przybliżeniu:

  1.  
  2. /projekt
  3. /application
  4. /library
  5. /App
  6. /modules
  7. /front
  8. /library
  9. /Front
  10. /controllers
  11. /models
  12. /forms
  13. ...
  14. Bootstrap.php
  15. /admin
  16. /library
  17. /Admin
  18. /controllers
  19. /models
  20. /forms
  21. ...
  22. Bootstrap.php
  23. ...
  24. Bootstrap.php
  25. /library
  26. /My
  27. /Zend
  28. ...
  29. ...
  30. index.php
  31.  


Jak widzicie koledzy mam kilka przestrzeni nazw dla klas:
My, Zend, App, Front, Admin

Nie ma problemu z autolaodem klas My, Zend i App ponieważ początkowy include_path zawiera ścieżki '/library' (My, Zend) oraz '/application/library' (App) - w przypadku tych bibliotek w autoladerze wystarczy że zarejestruję odpowiednie przestrzenie nazw: $autolaoder->registerNamespace(array('My', 'App'));
Pytanie jest teraz takie jak zrobić aby dynamicznie do include_path lądowały ścieżki do katalogu library w modułach - tak żebym mógł również zarejestrować przestrzenie nazw Front i Admin - a w przyszłości także inne specyficzne dla kolejnych modułów.
Chodzi mi oczywiście o zrobienie tego z wykorzystaniem mechanizmów zenda, najlepiej w bootstrapach poszczególnych modułów. W chwili obecnej obszedłem problem w ten sposób że w index.php na sztywno dopisałem do include_patha ścieżki /application/modules/front/library i /application/modules/admin/library a w bootstrapach dla modułów dodaję te przestrzenie nazw.
Brakuje mi w tym przypadku czegoś takiego jak ma Zend_Loader_PluginLoader gdzie mamy metodę addPrefixPath('Admin', '/application/modules/admin/library/Admin').

Proszę o pomoc. Być może jest jakiś mechanizm którego ja nie dostrzegam / nie umiem skorzystać.
Daimos
Może nie takie zendowe rozwiązanie, ale pluginek działa winksmiley.jpg
  1. public function dispatchLoopStartup(Zend_Controller_Request_Abstract $req)
  2. {
  3. $moduleName = $req->getModuleName();
  4. PATH_SEPARATOR . APPLICATION_PATH . '/modules/' . $moduleName . '/library/' . $moduleName);
  5. }

Możesz spróbować tutaj dodać przestrzenie nazw do autoloadera, zamiast includepath, czego nie sprawdzałem, ale powinno działać. Rozwiązanie w bootstrapie będzie Ci dodawało WSZYSTKIE przestrzenie na raz do każdego modułu, o czym dyskutowałem z eai w tym temacie Temat: ZendFramework modele w aplikacji z modulami, a za pomocą takiego plugina dodawane są tylko w aktywnym module
VegetaSSJ
Tak, śledziłem Waszą dyskusję. Mnie interesuje ładowanie wszystkich przestrzeni, więc rozwiązanie które podesłałeś mogę wykonać w abstrakcyjnym bootstrapie po którym dziedziczą bootrstrapy modułów. Jednak nie o coś takiego mi chodziło a raczej o uzyskanie info czy w zendzie są do tego odpowiednie narzędzia.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.