Personalización de 404
Si deseas controlar dinámicamente el contenido de 404, por ejemplo, devolver datos en formato json en una solicitud ajax {"code:"404", "msg":"404 not found"}
, y devolver la plantilla app/view/404.html
en solicitudes de página, consulta el siguiente ejemplo.
A continuación se muestra un ejemplo con la plantilla php nativa, otros tipos de plantillas como
twig
,blade
,think-tmplate
funcionan de manera similar.
Crear el archivo app/view/404.html
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>404 not found</title>
</head>
<body>
<?=htmlspecialchars($error)?>
</body>
</html>
Agregar el siguiente código en config/route.php
:
use support\Request;
use Webman\Route;
Route::fallback(function(Request $request){
// devuelve json en solicitudes ajax
if ($request->expectsJson()) {
return json(['code' => 404, 'msg' => '404 not found']);
}
// devuelve la plantilla 404.html para solicitudes de página
return view('404', ['error' => 'some error'])->withStatus(404);
});
Personalización de 405
Desde la versión 1.5.23 de webman-framework, la función de callback admite el paso de un parámetro de estado, si el estado es 404 significa que la solicitud no existe, 405 significa que el método de solicitud actual no es compatible (por ejemplo, acceder a una ruta configurada con Route::post() a través de 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);
});
Personalización de 500
Crear app/view/500.html
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>500 Internal Server Error</title>
</head>
<body>
Plantilla de error personalizada:
<?=htmlspecialchars($exception)?>
</body>
</html>
Crear app/exception/Handler.php
(si no existe el directorio, créalo tú mismo)
<?php
namespace app\exception;
use Throwable;
use Webman\Http\Request;
use Webman\Http\Response;
class Handler extends \support\exception\Handler
{
/**
* Renderiza y devuelve
* @param Request $request
* @param Throwable $exception
* @return Response
*/
public function render(Request $request, Throwable $exception) : Response
{
$code = $exception->getCode();
// devuelve datos en formato json en solicitudes ajax
if ($request->expectsJson()) {
return json(['code' => $code ? $code : 500, 'msg' => $exception->getMessage()]);
}
// devuelve la plantilla 500.html para solicitudes de página
return view('500', ['exception' => $exception], '')->withStatus(500);
}
}
Configurar config/exception.php
return [
'' => \app\exception\Handler::class,
];