Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [ZendFramework]Praca z modułami
Forum PHP.pl > Forum > PHP > Frameworki
sweter
Witam,
zasiadam do napisania dużego projektu, pomyślałem więc, że warto podzielić do na moduły. Jednak mam z nimi pewien problem...

Układ katalogów wygląda u mnie następująco:
Kod
- application
-- configs
-- models
-- modules
--- Login
---- controllers
----- IndexController.php
---- forms
---- models
---- views
--- default
---- controllers
----- IndexController.php
---- forms
---- models
---- views


Problem mam z wywoływaniem rzeczy z katalogów /models i /forms. Przykładowo plik ./application/modules/Login/controllers/IndexController.php wygląda tak:
  1. class Login_IndexController extends Zend_Controller_Action
  2. {
  3.  
  4. public function init()
  5. {
  6.  
  7. }
  8.  
  9. public function indexAction()
  10. {
  11. new Application_Module_Login_Model_User();
  12. }
  13.  
  14. }

Używa wyżej klasa znajduje się oczywiście w tym samym module w ./models/User.php.

PHP zwraca mi, że nie znalał tej klasy. W ww. pliku, na samym początku echuję jakiś napis, alby sprawdzić, czy ten plik w ogóle jest includowany - odpowiedź brzmi: nie.

Bootstrap.php prezentuje się tak (używam własnej biblioteki):
  1. protected function _initAutoload()
  2. {
  3. Zend_Loader_Autoloader::getInstance()->registerNamespace('Core_');
  4. }


Jak mogę odwołać się do modeli użytych w danych modułach?
zend
  1. protected function _initAdminAutoloader()
  2. {
  3. $autoloader = new Zend_Loader_Autoloader_Resource(array(
  4. 'namespace' => 'Admin',
  5. 'basePath' => APPLICATION_PATH . '/modules/admin',
  6. 'resourceTypes' => array(
  7. 'form' => array(
  8. 'path' => 'forms',
  9. 'namespace' => 'Form',
  10. ),
  11. 'model' => array(
  12. 'path' => 'models',
  13. 'namespace' => 'Model',
  14. ),
  15. )
  16. ));
  17. return $autoloader;
  18. }


Dostosuj do swoich potrzeb i napisz czy działa
CuteOne
  1. public function indexAction()
  2. {
  3. new Login_Model_User();
  4. //lub
  5. new Application_Login_Model_User();
  6. }
sweter
Cytat(zend @ 29.07.2012, 14:54:01 ) *
Dostosuj do swoich potrzeb i napisz czy działa

Niestety, ale nie. W polu $_resourceTypes klasy Zend_Loader_Autoloader_Resource() nie pojawił się odpowiedni wpis...
Zastanawiam się nad wpisywaniem tam (lub w configu) danych przy każdym module osobno, ale to może okazać się za dużo roboty. I w przyszłości będę musiał pamiętać o ewentualnych zmianach tam :/
ShadowD
  1. protected function _initAutoload()
  2. {
  3. $autoloader = new Zend_Application_Module_Autoloader(
  4. 'namespace' => 'Default_',
  5. 'basePath' => APPLICATION_PATH.'/modules/default/'
  6. )
  7. );
  8. [...]

Dla każdego tak samo, możesz utworzyć sobie tablicę i foreachem przejechać.

Używasz new Default_Form_AddGrups(), nic więcej nie trzeba i wszystko powinno śmigać aż miło.
sweter
A w jaki sposób mogę dodać kilka modułów?
ShadowD
  1. protected function _initAutoload()
  2. {
  3. $autoloader = new Zend_Application_Module_Autoloader(
  4. 'namespace' => 'Default_',
  5. 'basePath' => APPLICATION_PATH.'/modules/default/'
  6. )
  7. $autoloader = new Zend_Application_Module_Autoloader(
  8. 'namespace' => 'Default2_',
  9. 'basePath' => APPLICATION_PATH.'/modules/default2/'
  10. )
  11. $autoloader = new Zend_Application_Module_Autoloader(
  12. 'namespace' => 'Default3_',
  13. 'basePath' => APPLICATION_PATH.'/modules/default3/'
  14. )
  15. );
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.