Bonjour, voila je débute sur le bon petit framework CakePHP 2.x et il me vient l'idee de mettre en place des petites erreurs 404 sur mon site.
Apres avoir cherché un peu je ne trouve pas vraiment.
Des résultats de recherche indique d'utiliser $this->cakeError() mais cela ne semble plus utilisé depuis Cake 2.x et il semblait que d'apres des dev meilleurs que moi cela ne renvoyais qu'une erreur 200 au lieu de 404 entrée dans le code.

$this->cakeError('error404', array(array('url' => $this->action)));

D'autres résultats indique d'utiliser les throw exceptions , comme par exemple :

throw new NotFoundException('Page not found.');

Cette méthode fonctionne mais je suis de nouveau bloqué.
Je continue de chercher, mais par manque de temps je cherche une âme charitable qui pourrait m'indiquer comment obtenir une error 404 custom.

Note: Cela pourrait faire l'objet d'un petit tuto. A moins qu'on le voit déjà dans un des tutos mais lequel?

Merci d'avance.

6 réponses


Daff
Auteur
Réponse acceptée

Oui effectivement je l'avais vu, mais cela ne fonctionne que pour les versions inférieures de CakePHP (1.x mais pas 2.x).

L'autre méthode viens du CookBook de Cake, celle avec les throw exceptions.

throw new NotFoundException('Page not found.');

Mais j'ai un petit soucis, pour la vue cela utilise le fichier /app/View/Errors/error400.ctp je me demande si c'est normal ou si j'ai bien fait.

Voici le code source de base de ce fichier

<h2><?php echo $name; ?></h2>
<p class="error">
    <strong><?php echo __d('cake', 'Error'); ?>: </strong>
    <?php printf(
        __d('cake', 'The requested address %s was not found on this server.'),
        "<strong>'{$url}'</strong>"
    ); ?>
</p>
<?php
if (Configure::read('debug') > 0 ):
    echo $this->element('exception_stack_trace');
endif;
?>

$name = correspond au "Page not found" envoyé par le throw exception depuis le controller mais je me pose la question si c'est un template général pour toutes les erreur 4xx ou si c'est le code 400 qui est envoyé?! J'avoue que je cherche comment faire apparaitre le fameux code dans ce fichier ctp. Est-ce possible? Je cherche...

elscorto
Réponse acceptée

Salut, il s'agit d'un template général pour les erreurs 4xx. Le fait que tu appelles NotFoundException précise qu'il s'agit d'une 404, si tu mets ForbiddenException, il s'agira alors d'une 403

J'avoue qu'un petit tuto sur le custom des erreurs serait bien sympa!
Sinon Daff tu avais surement déjà vu cela mais je met le lien au cas ou ;)

Daff
Auteur

Ok merci beaucoup elscorto. Je valide ta réponse. Par hasard, le code de l'erreur serait-il stocké dans une variables quelconque ?

Pour info, j'indique le lien vers les cookbook de cake au sujet des erreurs Erreurs dans CakePHP 2.0

Fait un debug($this) dans la vue, elle doit bien être stockée quelque part ;)

Daff
Auteur

Ok je vais checker ;-)