Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Bonjour,
Je rencontre un problème de controller.
J'ai developpé sur mon ordi (en local, donc) et cela fonctionne. J'ai donc voulu le mettre en ligne, et là c'est le drame : il ne trouve pas mon controlleur.
Voici le bootstrap :
<? error_reporting(E_ALL|E_STRICT); date_default_timezone_set('Europe/Paris'); ini_set('include_path', '.' . PATH_SEPARATOR . '../application/lib/' . PATH_SEPARATOR . '../application/modules/XXX/models/' . PATH_SEPARATOR . '../application/modules/admin/models/' . PATH_SEPARATOR . ini_get('include_path') ); include "Zend/Loader.php"; Zend_Loader::loadClass('Zend_Db_Table_Abstract'); Zend_Loader::loadClass('Zend_Registry'); Zend_Loader::loadClass('Zend_Log'); Zend_Loader::loadClass('Zend_Log_Writer_Stream'); $writer = new Zend_Log_Writer_Stream('../application/log/fichier_log.log'); $logger = new Zend_Log($writer); //Zend_Log::registerLogger(new Zend_Log_Writer_Stream('../application/log/fichier_log.log')); //Zend_Log::setMessagePrefix('['. date('Y-m-d G:i') . '] ' . $_SERVER['REMOTE_ADDR'] . ': '); Zend_Registry::set('logger',$logger); Zend_Loader::loadClass('Zend_Auth'); Zend_Loader::loadClass('Zend_Cache'); Zend_Loader::loadClass('Zend_Config_Ini'); Zend_Loader::loadClass('Zend_Controller_Front'); Zend_Loader::loadClass('Zend_Controller_Router_Rewrite'); Zend_Loader::loadClass('Zend_Controller_Router_Route'); Zend_Loader::loadClass('Zend_Controller_Router_Route_Regex'); Zend_Loader::loadClass('Zend_Controller_Router_Route_Module'); Zend_Loader::loadClass('Zend_Controller_Router_Route_Static'); Zend_Loader::loadClass('Zend_Db'); Zend_Loader::loadClass('Zend_Db_Table_Row_Abstract'); Zend_Loader::loadClass('Zend_Debug'); Zend_Loader::loadClass('Zend_View'); Zend_Loader::loadClass('Document'); Zend_Loader::loadClass('Documents'); Zend_Loader::loadClass('DocumentsEvenements'); Zend_Loader::loadClass('Evenement'); Zend_Loader::loadClass('Evenements'); Zend_Loader::loadClass('Groupe'); Zend_Loader::loadClass('Groupes'); Zend_Loader::loadClass('Membre'); Zend_Loader::loadClass('Membres'); Zend_Loader::loadClass('MembresEvenements'); Zend_Loader::loadClass('MembresGroupes'); $logger->log("Chargement de la configuration", Zend_Log::DEBUG); $config = new Zend_Config_Ini('../application/config/config.ini', 'production'); define('ROOT_URL', 'http://1.2.3.4/~uniapaco/'); $front = Zend_Controller_Front::getInstance(); //INITIALISAION DU CACHE //A METTRE EN PRODUCTION $logger->log("Debut creation du cache", Zend_Log::DEBUG); $cache_bdd = Zend_Cache::factory('Core', 'File', array('lifetime'=>7200), array('cache_dir' => '../application/var/cache/')); Zend_Db_Table_Abstract::setDefaultMetadataCache($cache_bdd); $frontendOptions = array( 'caching' => false, 'lifetime' => 7200, 'debug_header' => true, // for debugging 'regexps' => array( '^/$' => array('cache' => false)/*, '^/contact' => array('cache' => true), '^/credits' => array('cache' => true), '^/aide' => array('cache' => true), '^/droit' => array('cache' => true), /*'^/article/' => array('cache' => false), // we don't cache the ArticleController... '^/article/view/' => array( // ...but we cache the "view" action of 'cache' => true, // this ArticleController 'cache_with_post_variables' => true, // and we cache even there are some variables in $_POST 'make_id_with_post_variables' => true, // (but the cache will be dependent of the $_POST array) )*/ ) ); $backendOptions = array( 'cache_dir' => '../application/var/cache/' ); $cache = Zend_Cache::factory('Page', 'File', $frontendOptions, $backendOptions); $logger->log("Fin creation du cache", Zend_Log::DEBUG); $logger->log("Demarrage du cache", Zend_Log::DEBUG); $cache->start(); $auth = null; if ( !$auth = $cache->load('auth') ) { $auth = Zend_Auth::getInstance(); $cache->save($auth, 'auth'); } $db = null; if ( !$db = $cache->load('db') ) { $logger->log("Initialisation de la BDD", Zend_Log::DEBUG); $db = Zend_Db::factory($config->database->adapter, $config->database->params->toArray()); Zend_Db_Table_Abstract::setDefaultAdapter($db); Zend_Registry::set('db',$db); $cache->save($db, 'db'); } /*$acl = null; if ( !$acl = $cache->load('acl') ) { $acl = new hhAcl($auth); $cache->save($acl, 'acl'); }*/ $view = null; if ( !$view = $cache->load('view') ) { $view = new Zend_View(); $viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper('viewRenderer'); $viewRenderer->setView($view)->setViewSuffix('tpl'); $cache->save($view, 'view'); } $router = null; if ( !$router = $cache->load('router') ) { //$router = new Zend_Controller_Router_Rewrite(); $router = $front->getRouter(); // returns a rewrite router by default //$router->addRoute('default', new Zend_Controller_Router_Route_Module(array('controller' => 'site', 'action' => 'index')) ); //route pour le profil d'un membre. URL de la forme 'membre/' suivi du login du membre $route = new Zend_Controller_Router_Route( 'admin/:controller/:action/*', array('module' => 'admin')); $router->addRoute('admin', $route); //GROUPE $route = new Zend_Controller_Router_Route( 'groupe/detail/:id', array('controller' => 'groupe', 'action' => 'detail'), array('id' => '\d+')); $router->addRoute('detailGroupe', $route); //EVENEMENT //route dynamique pour les evenements $route = new Zend_Controller_Router_Route( 'evenement/:id', array('controller' => 'evenement', 'action' => 'detail'), array('id' => '\d+')); $router->addRoute('detailEvenement', $route); //MEMBRE //route pour le profil d'un membre. URL de la forme 'membre/' suivi du login du membre $route = new Zend_Controller_Router_Route( 'membre/:nom', array('controller' => 'membre', 'action' => 'profil')); $router->addRoute('profilMembre', $route); $route = new Zend_Controller_Router_Route( 'profil', array('controller' => 'membre', 'action' => 'detail')); $router->addRoute('detailProfilMembre', $route); //AUTRE //route dynamique pour l'interface de gestion $route = new Zend_Controller_Router_Route('gestion/*', array('controller' => 'membre', 'action' => 'gestion')); $router->addRoute('gestion', $route); //route statique pour le formulaire de connexion $route = new Zend_Controller_Router_Route_Static('connexion', array('controller' => 'auth', 'action' => 'login')); $router->addRoute('connexion', $route); //route statique pour la deconnexion $route = new Zend_Controller_Router_Route_Static('deconnexion', array('controller' => 'auth', 'action' => 'logout')); $router->addRoute('deconnexion', $route); //route statique pour le formulaire d'enregistrement $route = new Zend_Controller_Router_Route_Static('inscription', array('controller' => 'auth', 'action' => 'register')); $router->addRoute('inscription', $route); //route statique pour le formulaire de contact $route = new Zend_Controller_Router_Route_Static('contact', array('controller' => 'site', 'action' => 'contact')); $router->addRoute('contact', $route); //route statique pour les credis $route = new Zend_Controller_Router_Route_Static('credits', array('controller' => 'site', 'action' => 'credits')); $router->addRoute('credits', $route); //route statique pour la page d'aide $route = new Zend_Controller_Router_Route_Static('aide', array('controller' => 'site', 'action' => 'help')); $router->addRoute('aide', $route); //route statique pour la page d'accueil $route = new Zend_Controller_Router_Route_Static('accueil', array('controller' => 'site', 'action' => 'index')); $router->addRoute('accueil', $route); //route statique pour la page legal $route = new Zend_Controller_Router_Route_Static('droit', array('controller' => 'site', 'action' => 'legals')); $router->addRoute('droit', $route); //route statique pour le formulaire de redaction //$router->addRoute('annonce/rediger', new Zend_Controller_Router_Route_Static( 'annonce/rediger', array('controller' => 'annonce', 'action' => 'new')) ); $logger->log("Route cree", Zend_Log::DEBUG); $cache->save($router, 'router'); } $front ->setBaseUrl('/~uniapaco/') ->setControllerDirectory(array( 'admin' => realpath('../application/modules/admin/controllers/'), 'default' => realpath('../application/modules/uniapac/controllers/') )) ->throwExceptions(true) ->setRouter($router) //->returnResponse(true) //->registerPlugin(new hhControllerPluginAuth($auth, $acl, $view)) //->registerPlugin(new Zend_Controller_Plugin_ErrorHandler()) //->setParam('useDefaultControllerAlways', true) ->setParam('config', $config) ->setParam('db' , $db) //->setParam('auth' , $auth) //->setParam('acl' , $acl) ->setParam('view' , $view) ->setParam('cache' ,$cache); //->setParam('noViewRenderer', true); $logger->log("Dispatching", Zend_Log::DEBUG); echo '<pre>'; try { $response = $front->dispatch(); } catch ( Exception $e ){ echo sprintf('<hr><pre>DEBUG INFOS :<br /><strong>Exception de type <em>%s</em> <u>%s</u> envoyée dans %s à la ligne %d </strong> <p>Stack Trace : %s </p></pre><hr>', get_class($e), $e->getMessage(), $e->getFile(), $e->getLine(), Zend_Debug::dump($e,null,false) ); } ?>
Voici le message d'erreur :
DEBUG INFOS : Exception de type Zend_Controller_Dispatcher_Exception Invalid controller specified (index) envoyée dans /home/uniapaco/application/lib/Zend/Controller/Dispatcher/Standard.php à la ligne 249 Stack Trace : object(Zend_Controller_Dispatcher_Exception)#39 (6) { ["message:protected"] => string(36) "Invalid controller specified (index)" ["string:private"] => string(0) "" ["code:protected"] => int(0) ["file:protected"] => string(70) "/home/uniapaco/application/lib/Zend/Controller/Dispatcher/Standard.php" ["line:protected"] => int(249) ["trace:private"] => array(2) { [0] => array(6) { ["file"] => string(56) "/home/uniapaco/application/lib/Zend/Controller/Front.php" ["line"] => int(914) ["function"] => string(8) "dispatch" ["class"] => string(35) "Zend_Controller_Dispatcher_Standard" ["type"] => string(2) "->" ["args"] => array(2) { [0] => object(Zend_Controller_Request_Http)#36 (14) { ["_paramSources:protected"] => array(2) { [0] => string(4) "_GET" [1] => string(5) "_POST" } ["_requestUri:protected"] => string(11) "/~uniapaco/" ["_baseUrl:protected"] => string(10) "/~uniapaco" ["_basePath:protected"] => NULL ["_pathInfo:protected"] => string(1) "/" ["_params:protected"] => array(3) { ["controller"] => string(5) "index" ["action"] => string(5) "index" ["module"] => string(7) "default" } ["_aliases:protected"] => array(0) { } ["_dispatched:protected"] => bool(true) ["_module:protected"] => string(7) "default" ["_moduleKey:protected"] => string(6) "module" ["_controller:protected"] => string(5) "index" ["_controllerKey:protected"] => string(10) "controller" ["_action:protected"] => string(5) "index" ["_actionKey:protected"] => string(6) "action" } [1] => object(Zend_Controller_Response_Http)#37 (8) { ["_body:protected"] => array(0) { } ["_exceptions:protected"] => array(0) { } ["_headers:protected"] => array(0) { } ["_headersRaw:protected"] => array(0) { } ["_httpResponseCode:protected"] => int(200) ["_isRedirect:protected"] => bool(false) ["_renderExceptions:protected"] => bool(false) ["headersSentThrowsException"] => bool(true) } } } [1] => array(6) { ["file"] => string(36) "/home/uniapaco/public_html/index.php" ["line"] => int(230) ["function"] => string(8) "dispatch" ["class"] => string(21) "Zend_Controller_Front" ["type"] => string(2) "->" ["args"] => array(0) { } } } }
la principale différence est que en local, j'accédais a l'appli grâce a http://localhost/ et en ligne grâce a http://MON_IP/~username/.
Lorsque que je change des paremetre ds le front controller, cela est détecté, dc le 'index.php' est bien chargé, apparemment c'est vraiment un problème dans le dispatch.
Merci de votre aide.
Dernière modification par nicolas2b (10-09-2008 09:52:46)
Hors ligne
Perso je parie sur un problème de majuscule. Si tu déploies sur un Unix/Linux, il est sensible à la casse.
Est-ce que ton IndexController.php a bien un I majuscule et un C majuscule ?
est-ce que tes répertoires de controlleur sont on bien la même casse que leur définition dans ton index.php ?
A mon avis, il faut chercher de ce coté.
A+, Philippe
Hors ligne
Hors ligne
J'ai développé sur Mac, et déployé sous Linux.
Pour mes controller :
-le fichier('physique') : indexController.php
-la classe IndexController (extends Zend_Controller_Action)
Ca a l'air correct ?!
Hors ligne
Ben non, justement il faut un grand I à ton IndexController.php
(mac os X est aussi case insensitive)
A+, Philippe
Hors ligne
Ca fonctionne :-)
MERCI
(et moi qui croyais que Mac, comme Linux, gérait la casse pareil - oh inexpérience rageante ;-) )
Hors ligne