Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [ZF] Problem z wczytaniem formularza z katalogu w module
Forum PHP.pl > Forum > PHP > Frameworki
rudolf35
Witam, zaczynam przygodę z zend frameworkiem i nie mogę poradzić sobie z jednym problemem. Otóż piszę aplikację zkładającą się z dwóch modułów. Nie mogę wczytywać plików z formularzami które znajdują się w katalogu modułu. Np jeśli plik formularza install.php znajduje się w katalogu /Application/forms/install.php uruchamiam go w kontrolerze zgodnie z zendową zasadą w sposób:
  1. $form = new Application_Form_Install();

I formularz działa. Jeśli natomiast umieszczę plik formularza w katalogu /Application/Modules/admin/forms/install.php i w kontrollerze /Application/modules/admin/controller/PluginsController.php zmienię z
  1. $form = new Application_Form_Install();


na

  1. $form = new Application_Module_Admin_Form_Install();


i oczywiście nazwę klasy formularza w pliku install.php na "Application_Module_Admin_Form_Install" to zend loader nie odnajduje mi klasy formularza, co objawia się błędem:
Cytat
Fatal error: Class 'Application_Module_Admin_Form_Install' not found in /var/www/PhpProject1/application/modules/admin/controllers/PluginsController.php on line 18


Zenda pod moduły ustawiłem według tutoriala:link
czyli stworzyłem plugin ładujący moduły:
  1. class Application_Plugin_ModuleLoader extends Zend_Controller_Plugin_Abstract
  2. {
  3. public function dispatchLoopStartup(Zend_Controller_Request_Abstract $request)
  4. {
  5. $module = $request->getModuleName();
  6.  
  7. // moduł domyślny można ominąć
  8. if($module == 'default') {
  9. return;
  10. }
  11.  
  12. // ścieżka do pliku Bootstrap
  13. $path = APPLICATION_PATH . '/modules/' . $module . '/Bootstrap.php';
  14.  
  15. // nazwa klasy Bootstrap
  16. $class = ucfirst($module) . '_Bootstrap';
  17.  
  18. // inicjalizacja, załadowanie i utworzenia obiektu klasy Bootstrap modułu
  19.  
  20. $application = new Zend_Application(
  21. APPLICATION_ENV,
  22. APPLICATION_PATH . '/modules/' . $module . '/configs/module.ini'
  23. );
  24.  
  25. Zend_Loader::loadFile('Bootstrap.php', dirname($path));
  26. $bootstrap = new $class($application);
  27. $bootstrap->bootstrap();
  28. }
  29. }


Wolałbym mieć pliki formularzy w podkatalogach modułów bo tak będzie przejrzyściej. Co muszę dopisać żeby ładować pliki formularzy z katalogu modułu?

Problem rozwiązany. Wystarczyło w głównym bootstrapie dodać:
  1. protected function _initAutoload(){
  2. $autoloader = new Zend_Application_Module_Autoloader(array(
  3. 'namespace' => 'Admin',
  4. 'basePath' => 'application/modules/admin/',
  5. ));
  6. $autoloader->addResourceType('forms', 'forms', 'Form_');
  7. return $autoloader;
  8. }

I nazwę klasy formularza w admin zmienić na Admin_Form_Install
pawv
  1. $form = new Application_Module_Admin_Form_Install();


spróbuj

  1. $form = new Application_Module_Admin_Forms_Install();
- jako że masz rozszerzoną ścieżkę i musisz używać dokładnej nazwy folderów

lub

  1. $form = new Admin_Form_Install();
- jeżeli masz dobrze moduły ustawione, jeżeli nie zadziała proponuje inny tutorial
KrzysiekWildfire
Jeżeli używasz Zend Tool do tworzenia modułów - to ma on jeden szkopuł - nie tworzy Ci on pliku bootstrap dla modułu. Więc jeżeli masz moduł admin, to jego plik bootstrap wygląda tak:
  1. <?php
  2.  
  3. class Admin_Bootstrap extends Zend_Application_Module_Bootstrap
  4. {
  5.  
  6. }


I umieszczasz go w katalogu: application/modules/admin/

I teraz tworzymy formularz "login" dla modułu admin. Umieszczamy plik login.php w katalogu application/modules/forms/. A formularz wygląda tak:

  1. <?php
  2.  
  3. class Admin_Form_Login extends Zend_Form
  4. {
  5.  
  6. public function init()
  7. {
  8. $this->addElement('text','login',array(
  9. 'label'=>'login'
  10. ));
  11.  
  12. $this->addElement('password','password',array(
  13. 'label'=>'hasło'
  14. ));
  15. }
  16.  
  17. }


I w kontrolerze odnosisz się do niego następująco:

  1. $form = new Admin_Form_Login();


Powinno śmigać.


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.