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?
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();
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.
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).
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();
}
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'; ?>
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
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.