Application modulaire avec ZEND
Bonjour tous le monde,
La question doit être redondante, mais je suis bloqué depuis plusieurs jours sur le chargement de mes classes.
Mon architecture est similaire à celle proposé par julien : http://julien-pauli.developpez.com/t...d-application/
En local (sous xampp 1.7.3 / PHP 5.3), je n'ai aucun souci, tout tourne bien.
Par contre, lorsque j'upload le tout en prod, sur une Fedora / php 5.2, mes classes ne sont plus retrouvées, et la PHP me lance une erreur:
Code:
Fatal error: Class 'Default_Model_DbTable_Businessunit' not found in /home/zend/application/modules/default/controllers/MenuController.php on line 9
Voici le contenu de mon fichier de conf: application.ini
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
| [production]
# initilisation du report d'erreurs pour le mode production
phpSettings.display_startup_errors = 0
phpSettings.display_errors = 0
#definition de la timezone
phpSettings.date.timezone = "Europe/Paris"
# Include path
includePaths.library = APPLICATION_PATH "/../library"
# Bootstrap
bootstrap.path = APPLICATION_PATH "/Bootstrap.php"
bootstrap.class = "Bootstrap"
#initialisation des modules
resources.frontController.moduleDirectory = APPLICATION_PATH "/modules"
resources.modules[] = ""
# Layout
resources.layout.layout = "default"
resources.layout.layoutPath = APPLICATION_PATH "/modules/default/layouts/scripts"
# Views
resources.view.encoding = "UTF-8"
# connexion à une base de données
resources.db.adapter = "pdo_mysql"
resources.db.params.host = "localhost"
resources.db.params.username = "xxxxx"
resources.db.params.password = "xxxxxxxx"
resources.db.params.dbname = "xxxxxxx"
resources.db.isDefaultTableAdapter = true
[staging : production]
[testing : production]
phpSettings.display_startup_errors = 1
phpSettings.display_errors = 1
[development : production]
# initilisation du report d'erreurs pour le mode developpement
phpSettings.display_startup_errors = 1
phpSettings.display_errors = 1 |
Voici mon fichier index.php
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
| <?php
// Define path to application directory
defined('APPLICATION_PATH')
|| define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../application'));
// Define application environment
defined('APPLICATION_ENV')
|| define('APPLICATION_ENV', (getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV') : 'production'));
// Ensure library/ is on include_path
set_include_path(implode(PATH_SEPARATOR, array(
realpath(APPLICATION_PATH . '/../library'),
get_include_path(),
)));
/** Zend_Application */
require_once 'Zend/Application.php';
require_once 'Zend/Loader/Autoloader.php';
Zend_Loader_Autoloader::getInstance();
//On lance la session
require_once 'Zend/Session.php';
Zend_Session::start();
// Create application, bootstrap, and run
$application = new Zend_Application(
APPLICATION_ENV,
APPLICATION_PATH . '/configs/application.ini'
);
$application->bootstrap()
->run(); |
Mon fichier Bootstrap.php principal
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
| class Bootstrap extends Zend_Application_Bootstrap_Bootstrap {
protected function _initDefaultNamespace()
{
$this->bootstrap('frontcontroller');
$fc = $this->getResource('frontcontroller');
$defaultModule = $fc->getControllerDirectory($fc->getDefaultModule());
new Zend_Application_Module_Autoloader(array(
'namespace' => '',
'basePath' => APPLICATION_PATH . $defaultModule,
));
}
protected function _initAutoload() {
$autoloader = new Zend_Application_Module_Autoloader(array(
'namespace' => '',
'basePath' => APPLICATION_PATH . '/modules/default',
));
return $autoloader;
}
protected function _initSession() {
try {
$sessionAdmin = new Zend_Session_Namespace('Admin');
} catch (Zend_Session_Exception $e) {
echo "Cannot instantiate this namespace ";
}
return $sessionAdmin;
}
protected function _initView() {
$layout = $this->bootstrap('layout')->getResource('layout');
$view = $layout->getView();
$view->addHelperPath('ZendX/JQuery/View/Helper/', 'ZendX_JQuery_View_Helper');
$viewRenderer = new Zend_Controller_Action_Helper_ViewRenderer();
$viewRenderer->setView($view);
Zend_Controller_Action_HelperBroker::addHelper($viewRenderer);
$view->jQuery()->setLocalPath('/js/jQuery/js/jquery-1.4.2.min.js')
->setUiLocalPath('/js/jQuery/js/jquery-ui-1.8.custom.min.js')
->addStyleSheet('/js/jQuery/css/jquery-ui-1.8.custom.css');
}
protected function _initViewHelpers() {
$layout = $this->bootstrap('layout')->getResource('layout');
$view = $layout->getView();
$view->headTitle('Titre');
$view->headTitle()->setSeparator(' - ');
$view->doctype('XHTML1_STRICT');
$view->headMeta()->appendHttpEquiv('Content-Type',
'text/HTML; charset=UTF-8')
->appendHttpEquiv('Content-Language', 'fr-FR');
$view->headScript()->appendFile('/ckeditor/ckeditor.js')
->appendFile('/ckeditor/adapters/jquery.js')
->appendFile('/js/my.js');
}
} |
J'ai deux modules "default" et "extranet" dans lesquels se trouvent un fichier fichier Boostrap.php.
Code:
1 2 3 4
| class Default_Bootstrap extends Zend_Application_Module_Bootstrap
{
} |
et
Code:
1 2 3
| class Extranet_Bootstrap extends Zend_Application_Module_Bootstrap
{
} |
Voila, j'espère que vous allez pouvoir m'aider à résoudre ce problème, qui est certe redondant mais que je n'arrive pas à résoudre, je pense avoir fait comme il faut, ça tourne en local, mais pas sur la machine de prod qui est une fédora.
Merci!