web-dev-qa-db-fra.com

CakePHP 2.0 - Comment créer des pages d'erreur personnalisées?

J'ai lu que la classe AppError est maintenant pour la compatibilité descendante et que les exceptions doivent être utilisées à la place. Comment créer des pages d'erreur personnalisées pour des choses comme des erreurs 404 ou des erreurs entièrement personnalisées?

31
BadHorsie

Essaye ça:

/app/Config/core.php

Le rendu d'exception doit être défini comme AppExceptionRender. Exemple:

Configure::write('Exception', array(
        'handler' => 'ErrorHandler::handleException',
        'renderer' => 'AppExceptionRenderer',
        'log' => true
));

/app/Controller/ErrorsController.php

class ErrorsController extends AppController {
    public $name = 'Errors';

    public function beforeFilter() {
        parent::beforeFilter();
        $this->Auth->allow('error404');
    }

    public function error404() {
        //$this->layout = 'default';
    }
}

/app/Lib/Error/AppExceptionRenderer.php

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

class AppExceptionRenderer extends ExceptionRenderer {

    public function notFound($error) {
        $this->controller->redirect(array('controller' => 'errors', 'action' => 'error404'));
    }
}

/app/View/Errors/error404.ctp

<div class="inner404">
    <h2>404 Error - Page Not Found</h2>
</div>

Insérez-le là où vous en avez besoin: throw new NotFoundException();

46
Andrew Kulakov

Pour personnaliser le contenu d'une page d'erreur 404 et ne pas avoir besoin de logique personnalisée, modifiez simplement le contenu de app/View/Errors/error400.ctp.

Cela ne semble être documenté correctement nulle part.

40
bfncs

Si vous êtes ne cherchez qu'à utiliser une autre mise en page au lieu de la configuration par défaut, ajoutez simplement $this->layout = 'your_error_layout'; à l'intérieur de votre error400.ctp (ou de toute autre page d'erreur que vous créez sous Affichage/Erreurs).

7
user221931

Créer une mise en page avec le nom 404 ou n'importe quoi et utiliser dans le contrôleur d'application

function _setErrorLayout() {
    if ($this->name == 'CakeError') { 
        $this->layout = '404';
    }
}
function beforeRender () {
    $this->_setErrorLayout();
}
5
Cake PHP

La réponse acceptée n'est pas la meilleure option, car ils redirigent l'URL de votre navigateur vers http://example.com.br/error/error404 et l'utilisateur ne peut pas suivre la page qu'il a entrée pour générer cette erreur.

La meilleure façon de gérer cette situation est de modifier le fichier sur View/Errors/error400.ctp, donc lorsque vous saisissez une URL introuvable comme http:example.com/crazy-wrong-url, le navigateur conservera cette URL mais affichera le contenu du error400.ctp fichier que vous modifiez.

Si vous souhaitez modifier la disposition de rendu de la vue, vous pouvez la saisir dans votre vue <?php $this->layout = 'error'; ?>

2
Daniel Faria

Vous pouvez créer CustomErrorPages ou Exeptions en créant simplement un class de votre erreur que vous allez afficher. Cette classe doit étendre CakeExeption. Ensuite, construisez votre exeptionlogic et votre ensemble. Maintenant, vous pouvez simplement throw new <YourExeptionClass>() et il affichera une erreur.

Documentation: CakeExceptions

0
Jonas Millan

Avait découvert aujourd'hui qu'il était possible d'obtenir du code excpetion dans un fichier ctp en utilisant $error->getCode() (dans CakePHP 2.x, au moins).

Le $error est où Cake met l'objet d'exception ...

Vous devriez maintenant pouvoir modifier le contenu de votre vue avec un if/else bloc conditionnel, basé sur cette valeur.

0
Jorge Junior