Personnaliser le 404
Si vous souhaitez contrôler dynamiquement le contenu du 404, par exemple, retourner des données JSON lors des requêtes ajax avec {"code":"404", "msg":"404 not found"}
et retourner le modèle app/view/404.html
lors des requêtes de page, veuillez vous référer à l'exemple suivant.
Ce qui suit utilise un modèle PHP natif, d'autres modèles
twig
blade
think-tmplate
fonctionnent de manière similaire.
Créer le fichier app/view/404.html
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>404 not found</title>
</head>
<body>
<?=htmlspecialchars($error)?>
</body>
</html>
Ajouter le code suivant dans config/route.php
:
use support\Request;
use Webman\Route;
Route::fallback(function(Request $request){
// Retourner JSON lors des requêtes ajax
if ($request->expectsJson()) {
return json(['code' => 404, 'msg' => '404 not found']);
}
// Retourner le modèle 404.html lors des requêtes de page
return view('404', ['error' => 'some error'])->withStatus(404);
});
Personnaliser le 405
Depuis la version 1.5.23 de webman-framework, les fonctions de rappel prennent en charge le paramètre status, si le status est 404 cela signifie que la requête n'existe pas, 405 signifie que la méthode de requête actuelle n'est pas prise en charge (par exemple, une route définie avec Route::post() est accessible via la méthode GET).
use support\Request;
use Webman\Route;
Route::fallback(function(Request $request, $status) {
$map = [
404 => '404 not found',
405 => '405 method not allowed',
];
return response($map[$status], $status);
});
Personnaliser le 500
Créer app/view/500.html
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>500 Internal Server Error</title>
</head>
<body>
Modèle d'erreur personnalisé :
<?=htmlspecialchars($exception)?>
</body>
</html>
Créer app/exception/Handler.php
(si le répertoire n'existe pas, veuillez le créer vous-même)
<?php
namespace app\exception;
use Throwable;
use Webman\Http\Request;
use Webman\Http\Response;
class Handler extends \support\exception\Handler
{
/**
* Rendu de la réponse
* @param Request $request
* @param Throwable $exception
* @return Response
*/
public function render(Request $request, Throwable $exception) : Response
{
$code = $exception->getCode();
// Retourner des données JSON lors des requêtes ajax
if ($request->expectsJson()) {
return json(['code' => $code ? $code : 500, 'msg' => $exception->getMessage()]);
}
// Retourner le modèle 500.html lors des requêtes de page
return view('500', ['exception' => $exception], '')->withStatus(500);
}
}
Configurer config/exception.php
return [
'' => \app\exception\Handler::class,
];