Section: Générer des erreurs HTTP
« Récupération des paramètres HTTP | ^ Développement d'un module | Utiliser le contrôleur CRUD » |
− Table des matières
Quand une erreur PHP survient ou une exception qui n'est pas traitée par votre contrôleur, survient, le routeur Jelix (coordinateur), génère une page avec une erreur HTTP 500. Voir le chapitre sur le gestionnaire d'erreur.
Mais vous voudriez peut-être génerer une autre page d'erreur ou une autre erreur HTTP.
Générer une erreur HTTP avec votre propre objet réponse ¶
C'est le moyen classique de générer des erreurs HTTP personnalisées dans Jelix.
Vous créez un objet réponse, typiquement une page HTML, et vous y indiquez le code
http et le message http au moyen de la méthode setHttpStatus()
.
Voici un exemple, qui affiche une page 404 si l'id donné ne correspond pas à un enregistrement.
public function myaction() {
$rep = $this->getResponse('html');
$id = $this->param('id');
$rec = jDao::get('mydao')->get($id);
if ($rec === null) {
// the record doesn't exist, let's return a 404 error
$rep->bodyTpl = 'my404';
$rep->setHttpStatus('404', 'Not Found');
return $rep;
}
// ...
return $rep;
}
Généré une erreur HTTP avec la réponse par défaut d'erreur HTTP ¶
Depuis Jelix 1.7.2, vous pouvez afficher une page d'erreur plus simplement, grâce à une exception.
Créez simplement une exception jHttpErrorException
exception, et la page d'erreur
par défaut sera affiché, avec le code HTTP indiqué. Vous pouvez aussi utiliser
jHttp404NotFoundException
, jHttp401UnauthorizedException
, ou jHttp403ForbiddenException
,
qui sont juste des classes dérivant de jHttpErrorException
.
Notre exemple précédent devient :
public function myaction() {
$rep = $this->getResponse('html');
$id = $this->param('id');
$rec = jDao::get('mydao')->get($id);
if ($rec === null) {
// the record doesn't exist, let's return a 404 error
throw new jHttp404NotFoundException()
}
// ...
return $rep;
}
Pour afficher la page d'erreur et retourner le code HTTP, le router instancie
la classe réponse qui est indiqué pour le type de réponse htmlerror
. Par
défaut, il s'agit de la classe jResponseHtmlError
, qui utilise le template
jelix~http_error.html
. Pour personnaliser l'affichage, vous pouvez
indiquer une autre classe dans la configuration,
ou redéfinir le template dans un thème.