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:
<?php
|| define('APPLICATION_ENV', (getenv('APPLICATION_ENV') ?
getenv('APPLICATION_ENV') : 'production'));
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
phpSettings
.date.timezone
= "Europe/Warsaw"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);
$default_loader = new Zend_Application_Module_Autoloader
(array( 'namespace' => '',
'basePath' => APPLICATION_PATH
));
}
protected function _initDoctrine()
{
$this->getApplication()->getAutoloader()
->pushAutoloader(array('Doctrine', 'autoload')); spl_autoload_register
(array('Doctrine', 'modelsAutoload')); $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 (IMG:
style_emoticons/default/winksmiley.jpg) Pozdrawiam!