2010-02-16 5 views
4

Je reçois tout le temps cette erreur:contrôleur spécifié non valide (erreur) - Zend Framework

exception 'Zend_Controller_Dispatcher_Exception' with message 'Invalid controller specified (error)' in blub\libraries\Zend\Controller\Dispatcher\Standard.php:242

J'ai un fichier répertoire « ErrorController.php » dans les « contrôleurs » qui ressemble à ceci:

class ErrorController extends Zend_Controller_Action 
{ 
    public function errorAction() 
    { 
     // blub 
    } 
} 

Mon bootstrap ressemble à ceci:

protected function _initController() 
{ 
    $this->_frontcontroller = Zend_Controller_Front::getInstance(); 
    $this->_frontcontroller->setControllerDirectory(APPLICATION_PATH . 'controllers/'); 
} 

protected function _initRoute() 
{ 
    $this->_route = $this->_frontcontroller->getRouter(); 
    $this->_route->addRoute('default', new Zend_Controller_Router_Route(
     ':controller/:action/*', array(
      'module'  => 'default', 
      'controller' => 'index', 
      'action'  => 'index' 
     ) 
    )); 
} 

public function run() 
{ 
    try { 
     $this->_frontcontroller->dispatch(); 
    } 
    catch (Exception $e) { 
     print nl2br($e->__toString()); 
    } 
} 

application.ini

[bootstrap] 
autoloadernamespaces[] = "Zend_" 
autoloadernamespaces[] = "ZendX_" 

[production]  
includePaths.library = APPLICATION_PATH "/libraries" 
bootstrap.path = APPLICATION_PATH "/Bootstrap.php" 
bootstrap.class = "Bootstrap" 

resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers" 
resources.frontController.params.throwexceptions = 0 
resources.frontController.params.displayExceptions = 0 


[development : production] 
resources.frontcontroller.params.throwexceptions = 1 
resources.frontController.params.displayExceptions = 1 

Répondre

7

Vous devez compter sur le chargeur/bootstrap ressources pour obtenir votre frontController, laissez tomber le _initController()

Pour obtenir votre contrôleur du boostrap, vous pouvez le faire $this->bootstrap('frontController'); et $frontController = $this->getResource('frontController');. De cette façon, il utilisera la configuration dans votre application.ini.

En ce qui concerne l'erreur, je pense que votre problème pourrait être la barre oblique manquante: APPLICATION_PATH . '/controllers/' que vous définissez manuellement dans le bootstrap. Votre APPLICATION_PATH pourrait ne pas se terminer par un /, donc il ne peut pas trouver applicationcontrollers/ErrorController.php

En outre, votre fonction _initRoute() pourrait être remplacé par le application.ini suivant:

resources.router.routes.default.type = "Zend_Controller_Router_Route" 
resources.router.routes.default.route = ":controller/:action/*" 
resources.router.routes.default.defaults.controller = "index" 
resources.router.routes.default.defaults.action = "index" 
resources.router.routes.default.defaults.module = "default" 

Cela laisse la seule partie de votre bootstrap qui veut le contrôleur run()try{}catch{} de la fonction qui pourrait être déplacé à votre index.php à la place.

Questions connexes