Maison  >  Article  >  cadre php  >  Comment mieux implémenter la réponse 404 avec le framework Laravel 5.5+

Comment mieux implémenter la réponse 404 avec le framework Laravel 5.5+

不言
不言original
2018-09-10 14:48:592004parcourir

Comment implémenter la page 404 ? Il existe en fait de nombreuses méthodes. Ensuite, cet article vous présentera comment utiliser le framework Laravel 5.5+ pour mieux implémenter la réponse 404. Sans plus tarder, examinons le contenu spécifique.

Laravel 5.5.10 encapsule deux méthodes de routeur utiles qui peuvent nous aider à fournir de meilleures pages 404 à nos utilisateurs. Désormais, lorsqu'une exception 404 est levée, Laravel affichera un magnifique fichier de vue 404.blade.php que vous pouvez personnaliser pour afficher l'interface utilisateur de l'utilisateur, mais dans cette vue, vous n'avez pas accès à session, cookie, authentification (auth), etc...

Dans laravel 5.5.10, nous avons un nouveau Route::fallback() Méthode utilisée pour définir la route sur laquelle Laravel se rabat lorsqu'aucune autre route ne correspond à la demande.

Route::fallback(function () {
    return 'Sorry' . auth()->user()->name . '! This page does not exist.';
});

Ainsi, nous pouvons désormais remplacer la simple vue 404 par une mise en page d'application avec une page et un pied de page normaux, tout en affichant également un message convivial à l'utilisateur.

Route::fallback(function() {
    return response()->view('notFound', [], 404);
});
@extends('layout.app')

@section('content')
    <h3>Sorry! this page doesn't exist.</h3>
@stop

Lorsque Laravel rend cette route de secours, tous les middlewares seront exécutés, donc lorsque vous définissez la solution de secours dans le fichier de route web.php Lorsque vous vous retirez de la route, tous les middlewares du groupe middleware web seront exécutés, afin que nous puissions obtenir les données de session.

Description de l'interface API

Maintenant, lorsque vous cliquez sur /page-non-existante, vous verrez la vue définie dans l'itinéraire de secours même lorsque vous cliquez sur / api/non-existing-endpoint, si vous ne souhaitez pas fournir cette interface, vous pouvez définir la réponse JSON dans la route de secours api. Passons à la Une autre API. La route de secours est définie dans le fichier de routage php :

Route::fallback(function() {
    return response()->json(['message' => 'Not Found!]);
});

Puisque le groupe de middleware API a le préfixe /api, tous les fichiers avec /api Les routes non définies avec préfixe entreront la route de secours dans le fichier de routage api.php, pas celle définie dans le fichier de routage web.php.

Utilisez abort(404) et l'exception ModelNotFound

Lors de l'utilisation de abort(404), une NotFoundHttpException sera levée et le processeur Le fichier de vue 404.blade.php est rendu pour nous. La même exception ModelNotFoundException sera gérée de la même manière. Alors, comment devrions-nous le gérer afin que nous puissions mieux restituer la solution de secours. ? Qu'en est-il d'une vue routé au lieu d'une vue normale ?

class Handler extends ExceptionHandler
{
    public function render($request, Exception $exception)
    {
        if ($exception instanceof NotFoundHttpException) {
            return Route::responseWithRoute('fallback');
        }

        if ($exception instanceof ModelNotFoundException) {
            return Route::responseWithRoute('fallback');
        }

        return parent::render($request, $exception);
    }
}

Route::respondWithRoute('fallback') Revenez en arrière et exécutez la route nommée fallback Nous pouvons nommer la route de secours comme suit :

Route::fallback(function() {
    return response()->view('notFound', [], 404);
})->name('fallback');
Même, vous pouvez spécifier une route de secours pour une ressource spécifique :

if ($exception instanceof ModelNotFoundException) {
    return $exception->getModel() == Server::class
                ? Route::respondWithRoute('serverFallback') 
                : Route::respondWithRoute('fallback');
}
Nous devons maintenant définir cette route de secours dans le fichier de routage :

Route::fallback(function(){
    return 'We could not find this server, there are other '. auth()->user()->servers()->count() . ' under your account ......';
})->name('serverFallback');
Recommandations associées :


mac mamp ngiux laravel framework signale une erreur 404

Comment implémenter l'interface réactive de Laravel 5.5

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn