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,
];