2009-08-09 4 views
2

Je me demandais pourquoi ma page d'erreur provoquait le non rendu de certaines pages de mon site , mais je me suis rendu compte que c'est parce que AppError étend ErrorHandler au lieu de AppController. Cela a causé certaines variables que j'ai défini dans la méthode beforeFilter de AppController pour ne pas être envoyé à la vue. Comme je ne peux pas accéder aux variables de session à partir d'AppError, je pense que je pourrais utiliser l'outil classRegistry pour instancier quelque chose qui pourrait simplement copier et coller le reste du code depuis le module beforeFilter d'AppController ... cela ne fonctionne pas, et cela ne semble pas être une solution très élégante. Est-ce que quelqu'un a des indices sur ce que serait le meilleur moyen d'aborder cela? Merci, David.CakePHP - Problèmes avec ErrorHandler ne s'étend pas AppController

Répondre

6

Votre classe AppError a une instance de contrôleur. Vous pouvez appeler le beforeFilter manuellement:

<?php 
class AppError extends ErrorHandler { 
    function error404() { 
    $this->controller->beforeFilter(); 
    parent::error404(); 
    } 
} 
?> 
+0

Merci beaucoup! J'ai littéralement été sur google pour toujours ... – David

1

Dans CakePHP 2, vous pouvez faire quelque chose comme cela pour obtenir le même effet. Dans app/Config/bootstrap.php, ajoutez cette ligne:

Configure::write('Exception.renderer', 'AppExceptionRenderer'); 

Ensuite, créez un fichier app/Lib/Error/AppExceptionRenderer.php avec ce code:

App::uses('ExceptionRenderer', 'Error'); 

class AppExceptionRenderer extends ExceptionRenderer { 
    protected function _outputMessage($template) { 
     $this->controller->beforeFilter(); 
     $this->controller->render($template); 
     $this->controller->afterFilter(); 
     $this->controller->response->send(); 
    } 
} 

Décrite plus généralement ici: http://book.cakephp.org/2.0/en/development/exceptions.html#using-a-custom-renderer-with-exception-renderer-to-handle-application-exceptions

Edit: lien Mise à jour au point pour corriger emplacement du livre CakePHP 2.0 en date du 05 juillet 2012.

Questions connexes