Questo articolo fa riferimento alla versione più recente di Laravel, in questo caso la versione 9.
La pagina di errore 404 di default è così composta
Abbiamo diversi modi per personalizzare queste pagine
- creare manualmente ogni pagina di errore;
- generare tutte le pagine di errore tramite il comando php artisan.
- Creare manualmente ogni pagina di errore
Questo è il modo più semplice per coloro che non hanno troppa dimistichezza con Laravel, ad esempio se vogliamo personalizzare la pagina 404 basta creare un file 404.blade.php in resources/views/errors/, la cartella errors non è presente nell'applicazione di default che viene generata quando creiamo un nuovo progetto Laravel, quindi dobbiamo crearla noi e di conseguenza creare all'interno di questa cartella tutte le pagine di errore nel seguente formato
- 4xx.blade.php
- 5xx.blade.php
e poi personalizzarle come vogliamo, ecco un esempio della pagina 404.blade.php personalizzata
404.blade.php
<!doctype html>
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>404 Page Not Found</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<div class="container mt-5 pt-5">
<div class="alert alert-danger text-center" role="alert">
<h2 class="display-3">404</h2>
<p class="display-5">Oops! Page Not Found.</p>
</div>
</div>
</body>
</html>
avremo il seguente risultato
- Generare tutte le pagine di errore tramite il comando php artisan
E' possibile generare tutte le pagine di errore tramite CLI usando il comando php artisan, il comando da utilizzare è il seguente
$ php artisan vendor:publish --tag=laravel-errors
avremo il seguente risultato
cioè verranno generati tutti i file blade delle pagine di errore, in particolare vengono generati anche altri due file layout.blade.php e minimal.blade.php, che rappresentano il layout di base da poter utilizzare nelle singole pagine di errore secondo la logica dei componenti Laravel, ad esempio se vogliamo ottenere lo stesso risultato visto in precedenza per la pagina 404, modifichiamo il file minimal.blade.php come segue
minimal.blade.php
<!doctype html>
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>@yield('title')</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<div class="container mt-5 pt-5">
<div class="alert alert-danger text-center" role="alert">
<h2 class="display-3">@yield('code')</h2>
<p class="display-5"> @yield('message')</p>
</div>
</div>
</body>
</html>
e il file 404.blade.php come segue
404.blade.php
@extends('errors::minimal')
@section('title', __('404 Page Not Found'))
@section('code', '404')
@section('message', __('Oops! Page Not Found.'))