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:
<?php CODEBASE_PATH, ))); require_once 'Zend/Application.php'; $application = new Zend_Application( APPLICATION_ENV, APPLICATION_PATH . '/configs/application.ini' ); $application->bootstrap() ->run();
plik application.ini:
[production] phpSettings.display_startup_errors = 0 phpSettings.display_errors = 0 bootstrap.path = APPLICATION_PATH "/Bootstrap.php" bootstrap.class = "Bootstrap" autoloaderNamespaces[] = "Doctrine" resources.frontController.moduleDirectory = APPLICATION_PATH "/modules" resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers" resources.modules[] = ;doctrine paths doctrine.dsn = "mysql://xxx:yyy@zzz/abc" doctrine.data_fixtures_path = APPLICATION_PATH "/configs/data/fixtures" doctrine.sql_path = APPLICATION_PATH "/configs/data/sql" doctrine.migrations_path = APPLICATION_PATH "/configs/migrations" doctrine.yaml_schema_path = APPLICATION_PATH "/configs/schema.yml" doctrine.models_schema_path = APPLICATION_PATH "/models" ;doctrine models doctrine.generate_models_options.pearStyle = true doctrine.generate_models_options.generateTableClasses = false doctrine.generate_models_options.generateBaseClasses = true doctrine.generate_models_options.baseClassPrefix = "Base_" doctrine.generate_models_options.baseClassesDirectory = doctrine.generate_models_options.classPrefixFiles = false doctrine.generate_models_options.classPrefix = "Model_" doctrine.model_autoloading = 2 [doctrineCLI : production ] doctrine.model_autoloading = 1 [staging : production] [testing : production] phpSettings.display_startup_errors = 1 phpSettings.display_errors = 1 [development : production] phpSettings.display_startup_errors = 1 phpSettings.display_errors = 1
oraz Bootstrap.php (ten bezpośrednio w application/, boostrstrapy w modułach mam z pustymi klasami)
<?php class Bootstrap extends Zend_Application_Bootstrap_Bootstrap { protected function _initFrontController() { $frontController = Zend_Controller_Front::getInstance(); $frontController->addModuleDirectory(APPLICATION_PATH . '/modules'); $frontController->setDefaultModule('default'); return $frontController; } protected function _initAutoloaders() { $autoloader = Zend_Loader_Autoloader::getInstance(); $autoloader->setFallbackAutoloader(true); 'namespace' => '', 'basePath' => APPLICATION_PATH )); } protected function _initDoctrine() { $this->getApplication()->getAutoloader() $manager = Doctrine_Manager::getInstance(); $manager->setAttribute(Doctrine::ATTR_AUTO_ACCESSOR_OVERRIDE, true); $manager->setAttribute( Doctrine::ATTR_MODEL_LOADING, Doctrine::MODEL_LOADING_CONSERVATIVE ); $manager->setAttribute(Doctrine::ATTR_AUTOLOAD_TABLE_CLASSES, true); $doctrine = $this->getOption('doctrine'); $conn = Doctrine_Manager::connection($doctrine['dsn'], 'doctrine'); $conn->setAttribute(Doctrine::ATTR_USE_NATIVE_ENUM, true); return $conn; } }
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
