2012-09-26 1 views
0

J'ai une vue qui fonctionne correctement lorsque "http: // localhost/public/compte/test" est visité, mais lorsqu'un point d'exclamation est ajouté ("http : // localhost/public/account/test! "), j'obtiens une erreur d'application; Cependant, je m'attends à une erreur 404. Il n'y a qu'une méthode testAction() dans le contrôleur, pas une méthode test-Action() (comme si PHP me laisserait même partir avec ça). Que puis-je faire pour obtenir une erreur 404 à lancer à la place?Zend Framework routing renvoie une erreur d'application pour le point d'exclamation arrière sur l'URL

Voici les détails de l'erreur d'application que je reçois:

Message: script 'compte/test-.phtml' introuvable dans le chemin (/ site/application/modules/default/vues/scripts /)

trace de la pile:

#0 /Applications/XAMPP/xamppfiles/lib/php/pear/Zend/View/Abstract.php(876): Zend_View_Abstract->_script('account/test-.p...') 
    #1 /Applications/XAMPP/xamppfiles/lib/php/pear/Zend/Controller/Action/Helper/ViewRenderer.php(897): Zend_View_Abstract->render('account/test-.p...') 
    #2 /Applications/XAMPP/xamppfiles/lib/php/pear/Zend/Controller/Action/Helper/ViewRenderer.php(918): Zend_Controller_Action_Helper_ViewRenderer->renderScript('account/test-.p...', NULL) 
    #3 /Applications/XAMPP/xamppfiles/lib/php/pear/Zend/Controller/Action/Helper/ViewRenderer.php(957): Zend_Controller_Action_Helper_ViewRenderer->render() 
    #4 /Applications/XAMPP/xamppfiles/lib/php/pear/Zend/Controller/Action/HelperBroker.php(277): Zend_Controller_Action_Helper_ViewRenderer->postDispatch() 
    #5 /Applications/XAMPP/xamppfiles/lib/php/pear/Zend/Controller/Action.php(523): Zend_Controller_Action_HelperBroker->notifyPostDispatch() 
    #6 /Applications/XAMPP/xamppfiles/lib/php/pear/Zend/Controller/Dispatcher/Standard.php(289): Zend_Controller_Action->dispatch('testAction') 
    #7 /Applications/XAMPP/xamppfiles/lib/php/pear/Zend/Controller/Front.php(954): Zend_Controller_Dispatcher_Standard->dispatch(Object(Zend_Controller_Request_Http), Object(Zend_Controller_Response_Http)) 
    #8 /Applications/XAMPP/xamppfiles/lib/php/pear/Zend/Application/Bootstrap/Bootstrap.php(97): Zend_Controller_Front->dispatch() 
    #9 /Applications/XAMPP/xamppfiles/lib/php/pear/Zend/Application.php(366): Zend_Application_Bootstrap_Bootstrap->run() 
    #10 /website/public/index.php(42): Zend_Application->run() 
    #11 {main} 
    Request Parameters: 
    array(3) { 
     ["controller"]=> 
     string(7) "account" 
     ["action"]=> 
     string(5) "test!" 
     ["module"]=> 
     string(7) "default" 
    } 

Répondre

0

utilisation urlencode ...

testAction(urlencode("http://localhost/public/account/test!")) 
1

Il y a une place dans ErrorController.php qui ressemble à ceci:

public function errorAction() 
{ 
    $errors = $this->_getParam('error_handler'); 

    switch ($errors->type) { 
     case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_CONTROLLER: 
     case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_ACTION: 

      // 404 error -- controller or action not found 
      $this->getResponse()->setHttpResponseCode(404); 
      $this->view->message = 'Page not found'; 
      break; 
     default: 
      // application error 
      $this->getResponse()->setHttpResponseCode(500); 
      $this->view->message = 'Application error'; 
      break; 
    } 

    $this->view->exception = $errors->exception; 
    $this->view->request = $errors->request; 
} 

Vous pouvez ajuster un peu pour couvrir votre cas:

switch ($errors->type) { 
     case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_CONTROLLER: 
     case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_ACTION: 
     case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_OTHER: