Laravel 5.5+ フレームワークで 404 レスポンスをより適切に実装する方法

不言
リリース: 2018-09-10 14:48:59
オリジナル
1999 人が閲覧しました

404ページを実装するにはどうすればよいですか?実際には多くの方法があります。次に、この記事では、Laravel 5.5 以降のフレームワークを使用して 404 応答をより適切に実装する方法を紹介します。早速、具体的な内容を見てみましょう。

Laravel 5.5.10 には、ユーザーにより良い 404 ページを提供するのに役立つ 2 つの便利なルーター メソッドがカプセル化されています。 404 例外がスローされると、Laravel は美しい 404.blade.php ビュー ファイルを表示します。このビュー ファイルはユーザー UI に表示するようにカスタマイズできますが、このビューでは session にアクセスできません。 Cookie 、認証 (auth) など...

laravel 5.5.10 では、リクエストルーティングに一致するルートが他にない場合の Laravel のフォールバックを定義する新しい Route::fallback() メソッドがあります。

Route::fallback(function () {
    return 'Sorry' . auth()->user()->name . '! This page does not exist.';
});
ログイン後にコピー

これで、シンプルな 404 ビューを、通常のページとフッターを備えたアプリ レイアウトに置き換えることができると同時に、ユーザーにフレンドリーなメッセージも表示できるようになりました。

Route::fallback(function() {
    return response()->view('notFound', [], 404);
});
ログイン後にコピー
@extends('layout.app')

@section('content')
    <h3>Sorry! this page doesn't exist.</h3>
@stop
ログイン後にコピー

Laravel がこのフォールバック ルートをレンダリングするとき、すべてのミドルウェアが実行されるため、web.php ルート ファイルでフォールバック ルートを定義すると、web ミドルウェア グループ内のすべてのミドルウェアが実行されます。 セッションデータを取得できます。

API インターフェースの説明

これで、/non-existing-page をクリックすると、/api/non-existing-endpoint をクリックした場合でも、フォールバック ルートで定義されたビューが表示されます。このインターフェースを提供したくない場合は、api フォールバック ルートで JSON 応答を定義できます。api.php ルーティング ファイルで別のフォールバック ルートを定義しましょう。API ミドルウェア グループには

/ が付属しているため、 api

プレフィックスを使用すると、/api プレフィックスを持つすべての未定義ルートは、 web.php ルーティング ファイルで定義されたルートではなく、api.php ルーティング ファイル内のフォールバック ルートに移動します。 abort(404) と ModelNotFound 例外を使用する

abort(404)

を使用すると、NotFoundHttpException がスローされます。この時点で、プロセッサは 404.blade.php ビュー ファイルをレンダリングします。同じ ModelNotFoundException 例外は同じ方法で処理されます。通常のビューではなくフォールバック ルートのビューをより適切にレンダリングできるようにするには、どのように処理すればよいでしょうか?

Route::fallback(function() {
    return response()->json(['message' => 'Not Found!]);
});
ログイン後にコピー

Route::respondWithRoute('fallback')

戻って、fallbackという名前のルートを実行します。

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::fallback(function() {
    return response()->view('notFound', [], 404);
})->name('fallback');
ログイン後にコピー
次に、ルーティング ファイルでこのフォールバック ルートを定義する必要があります:

if ($exception instanceof ModelNotFoundException) {
    return $exception->getModel() == Server::class
                ? Route::respondWithRoute('serverFallback') 
                : Route::respondWithRoute('fallback');
}
ログイン後にコピー
関連する推奨事項:


mac mamp ngiux laravel フレームワークが 404 エラーを報告する


Laravel 5.5 応答性インターフェイスを実装する方法

以上がLaravel 5.5+ フレームワークで 404 レスポンスをより適切に実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート