2010-01-31 5 views
3

Mon application gère les erreurs heureusement en développement, les erreurs et les exceptions. Lorsque je passe en production, l'application renvoie simplement une page vierge car la configuration est configurée pour ne pas afficher les erreurs. Existe-t-il une méthode standard dans ZF pour envoyer des visiteurs à une «Page non trouvée» bien formatée en utilisant une mise en page de l'application afin de ne pas leur présenter une page vierge. Merci d'avance.Zend Framework gérer gracieusement les exceptions dans l'environnement de production

Répondre

2

Habituellement, si vous avez utilisé le CLI pour créer le projet zend il sera déjà en mesure de faire ce que vous demandez. Si vous allez les scripts/view/errors/error.phtml ce sera le fichier phtml que vous pouvez utiliser pour créer la vue que vous cherchez à utiliser.

Bien que si vous n'avez pas utilisé la CLI pour créer le projet zend ci-dessous est le produit ErrorController utilisé

<?php 

class ErrorController extends Nanaly_Controller 
{ 

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

     switch ($errors->type) { 
      case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_ROUTE: 
      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; 
     } 

     // Log exception, if logger available 
     if ($log = $this->getLog()) { 
      $log->crit($this->view->message, $errors->exception); 
     } 

     // conditionally display exceptions 
     if ($this->getInvokeArg('displayExceptions') == true) { 
      $this->view->exception = $errors->exception; 
     } 

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

    public function getLog() 
    { 
     $bootstrap = $this->getInvokeArg('bootstrap'); 
     if (!$bootstrap->hasPluginResource('Log')) { 
      return false; 
     } 
     $log = $bootstrap->getResource('Log'); 
     return $log; 
    } 


} 

Remarque: ce contrôleur a été généré en utilisant Zend 1.10.0

et la vue doit être placé au même endroit que mentionné précédemment.

+0

Merci. J'ai utilisé la CLI et tout a bien fonctionné, j'ai édité le fichier error.phtml pour ajouter du style html afin qu'il soit dans le même aspect que le reste du site. Pour que cela fonctionne dans la production, j'ai dû quitter; à la fin de error.phtml. Cheers, Marc – ed103

2

Vous pouvez le faire avec une coutume ErrorController, un exemple:

http://www.talkincode.com/a-useful-error-controller-class-for-zend-framework-applications-729.html

+0

Merci, je vais jeter un coup d'oeil et vous le faire savoir. – ed103

+0

Belle classe, mais je semble toujours avoir le même problème, si j'appelle hit toute URL qui n'est pas spécifiée dans ma liste acl comme myurl/foo, je reçois: Erreur fatale: exception non interceptée 'Zend_Acl_Exception' avec le message 'Ressource 'foo' non trouvé 'dans /Users/marchampson/Sites/heavenlycakes/trunk/library/Zend/Acl.php:347 Stack trace: # 0 ... et un peu plus, mais la boîte de commentaires est à court de caractères .. – ed103

+0

Correction mais laissera ceci ouvert pendant 1 jour de plus dans l'espoir que quelqu'un puisse faire la lumière. On dirait que les contrôleurs travaillaient, mais ... je devais mettre une sortie; commande à la fin de mon fichier de vue error.phtml. Si cela ne s'est pas arrêté là, j'ai eu l'erreur fatale ci-dessus. Des idées? – ed103

Questions connexes