Benutzerdefinierte 404
Wenn Sie den Inhalt von 404 dynamisch steuern möchten, z. B. während einer Ajax-Anfrage JSON-Daten {"code":"404", "msg":"404 not found"}
zurückgeben und bei Seitenanfragen das Template app/view/404.html
zurückgeben möchten, beachten Sie bitte folgendes Beispiel.
Im Folgenden wird das native PHP-Template als Beispiel verwendet. Andere Templates wie
twig
,blade
undthink-template
funktionieren nach dem gleichen Prinzip.
Erstellen Sie die Datei app/view/404.html
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>404 not found</title>
</head>
<body>
<?=htmlspecialchars($error)?>
</body>
</html>
Fügen Sie den folgenden Code in config/route.php
ein:
use support\Request;
use Webman\Route;
Route::fallback(function(Request $request){
// Bei Ajax-Anfragen JSON zurückgeben
if ($request->expectsJson()) {
return json(['code' => 404, 'msg' => '404 not found']);
}
// Bei Seitenanfragen das Template 404.html zurückgeben
return view('404', ['error' => 'some error'])->withStatus(404);
});
Benutzerdefinierte 405
Seit Version 1.5.23 des Webman-Frameworks unterstützt die Callback-Funktion die Übergabe des Statusparameters. Wenn der Status 404 ist, bedeutet dies, dass die Anfrage nicht existiert, und 405 bedeutet, dass die aktuelle Anfragemethode nicht unterstützt wird (z. B. wird eine über Route::post()
festgelegte Route über GET angesprochen).
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);
});
Benutzerdefinierte 500
Erstellen Sie app/view/500.html
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>500 Internal Server Error</title>
</head>
<body>
Benutzerdefiniertes Fehler-Template:
<?=htmlspecialchars($exception)?>
</body>
</html>
Erstellen Sie app/exception/Handler.php
(falls das Verzeichnis nicht existiert, bitte selbst erstellen)
<?php
namespace app\exception;
use Throwable;
use Webman\Http\Request;
use Webman\Http\Response;
class Handler extends \support\exception\Handler
{
/**
* Rendering Rückgabe
* @param Request $request
* @param Throwable $exception
* @return Response
*/
public function render(Request $request, Throwable $exception) : Response
{
$code = $exception->getCode();
// Bei Ajax-Anfragen JSON-Daten zurückgeben
if ($request->expectsJson()) {
return json(['code' => $code ? $code : 500, 'msg' => $exception->getMessage()]);
}
// Bei Seitenanfragen das Template 500.html zurückgeben
return view('500', ['exception' => $exception], '')->withStatus(500);
}
}
Konfigurieren Sie config/exception.php
return [
'' => \app\exception\Handler::class,
];