Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [ZendFramework]Bootstrap + cfg.ini dla modułów
Forum PHP.pl > Forum > PHP > Frameworki
ze4lot
Witam,
ostatnio walczę z ZF oraz modułami i mam pewien problem. Nie wiem za bardzo jak napisać bootrstraper oraz plik application.ini aby moduły ładowały się same wraz z ich layoutami.

Moja struktura katalogów:

projekt1:

application/
- configs/
-- data/
--- fixtures/
--- sql/
-- migrations/
-- application.ini
- models/
-- generated/
- modules/
-- # jakis moduł #/
--- controllers/
--- views/
--- forms/
--- layout/
--- bootstrap.php
- scripts/
-- doctrine
-- doctrine.php
- bootstrap.php
library/
- ...
public/
- index.php
- ...

biblioteki (np. Zend, Doctrine, PHPThumb...)
trzymam w osobmyn folderze

CodeBase:

Zend/
Doctrine/
...

Mój plik index.php:

  1. <?php
  2.  
  3. defined('APPLICATION_PATH')
  4. || define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../application'));
  5.  
  6. defined('ROOT_PATH')
  7. || define('ROOT_PATH', realpath(dirname(__FILE__) . '/../'));
  8.  
  9. defined('CODEBASE_PATH')
  10. || define('CODEBASE_PATH', realpath(dirname(__FILE__) . '/../../codebase'));
  11.  
  12. defined('APPLICATION_ENV')
  13. || define('APPLICATION_ENV', (getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV') : 'production'));
  14.  
  15. set_include_path(implode(PATH_SEPARATOR, array(
  16. realpath(ROOT_PATH . '/library'),
  17. CODEBASE_PATH,
  18. )));
  19.  
  20. require_once 'Zend/Application.php';
  21. $application = new Zend_Application(
  22. APPLICATION_ENV,
  23. APPLICATION_PATH . '/configs/application.ini'
  24. );
  25. $application->bootstrap()
  26. ->run();



plik application.ini:

  1. [production]
  2. phpSettings.display_startup_errors = 0
  3. phpSettings.display_errors = 0
  4. phpSettings.date.timezone = "Europe/Warsaw"
  5. bootstrap.path = APPLICATION_PATH "/Bootstrap.php"
  6. bootstrap.class = "Bootstrap"
  7. autoloaderNamespaces[] = "Doctrine"
  8.  
  9. resources.frontController.moduleDirectory = APPLICATION_PATH "/modules"
  10. resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers"
  11. resources.modules[] =
  12.  
  13. ;doctrine paths
  14. doctrine.dsn = "mysql://xxx:yyy@zzz/abc"
  15. doctrine.data_fixtures_path = APPLICATION_PATH "/configs/data/fixtures"
  16. doctrine.sql_path = APPLICATION_PATH "/configs/data/sql"
  17. doctrine.migrations_path = APPLICATION_PATH "/configs/migrations"
  18. doctrine.yaml_schema_path = APPLICATION_PATH "/configs/schema.yml"
  19. doctrine.models_schema_path = APPLICATION_PATH "/models"
  20.  
  21. ;doctrine models
  22. doctrine.generate_models_options.pearStyle = true
  23. doctrine.generate_models_options.generateTableClasses = false
  24. doctrine.generate_models_options.generateBaseClasses = true
  25. doctrine.generate_models_options.baseClassPrefix = "Base_"
  26. doctrine.generate_models_options.baseClassesDirectory =
  27. doctrine.generate_models_options.classPrefixFiles = false
  28. doctrine.generate_models_options.classPrefix = "Model_"
  29. doctrine.model_autoloading = 2
  30.  
  31. [doctrineCLI : production ]
  32. doctrine.model_autoloading = 1
  33.  
  34. [staging : production]
  35.  
  36. [testing : production]
  37. phpSettings.display_startup_errors = 1
  38. phpSettings.display_errors = 1
  39.  
  40. [development : production]
  41. phpSettings.display_startup_errors = 1
  42. phpSettings.display_errors = 1


oraz Bootstrap.php (ten bezpośrednio w application/, boostrstrapy w modułach mam z pustymi klasami)

  1. <?php
  2.  
  3. class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
  4. {
  5. protected function _initFrontController()
  6. {
  7. $frontController = Zend_Controller_Front::getInstance();
  8. $frontController->addModuleDirectory(APPLICATION_PATH . '/modules');
  9. $frontController->setDefaultModule('default');
  10. return $frontController;
  11. }
  12.  
  13. protected function _initAutoloaders()
  14. {
  15. $autoloader = Zend_Loader_Autoloader::getInstance();
  16. $autoloader->setFallbackAutoloader(true);
  17.  
  18. $default_loader = new Zend_Application_Module_Autoloader(array(
  19. 'namespace' => '',
  20. 'basePath' => APPLICATION_PATH
  21. ));
  22. }
  23.  
  24. protected function _initDoctrine()
  25. {
  26. $this->getApplication()->getAutoloader()
  27. ->pushAutoloader(array('Doctrine', 'autoload'));
  28. spl_autoload_register(array('Doctrine', 'modelsAutoload'));
  29. $manager = Doctrine_Manager::getInstance();
  30. $manager->setAttribute(Doctrine::ATTR_AUTO_ACCESSOR_OVERRIDE, true);
  31. $manager->setAttribute(
  32. Doctrine::ATTR_MODEL_LOADING,
  33. Doctrine::MODEL_LOADING_CONSERVATIVE
  34. );
  35. $manager->setAttribute(Doctrine::ATTR_AUTOLOAD_TABLE_CLASSES, true);
  36.  
  37. $doctrine = $this->getOption('doctrine');
  38. $conn = Doctrine_Manager::connection($doctrine['dsn'], 'doctrine');
  39. $conn->setAttribute(Doctrine::ATTR_USE_NATIVE_ENUM, true);
  40. return $conn;
  41. }
  42.  
  43. }



Jak się domyślacie aplikacja nie działa i proszę o pomoc w odpaleniu.
Osiągnąć chcę aby nowo-dodane moduły ładowały się automatycznie bez ingerencji w application.ini oraz bootstrap.php. Możliwe, że utworzone przeze mnie struktury katalogów są złe i proszę o ewentualne poprawienie mnie.

wersja zenda to 1.10

z góry dziękuję za pomoc.

PS.
Uczę się dopiero więc jeśli mogę to proszę o dokładne wyjaśnienia co i dla czego winksmiley.jpg Pozdrawiam!
zend
Do layoutów musisz napisać plugin, a co do modułów, to jaki to nie widze problemu w przeczytaniu katalogów w których trzymasz moduły i dodaniu ich do aplikacji. Ja mam nadpisane narzędzie w Zend_Tool do generowania modułów, tak aby dodawało wygenerowany moduł do application.ini, polecam smile.gif
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.