8
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Laravel5.7: エラーページを作る

Last updated at Posted at 2017-10-24

現在、オーナー以外の人が記事を編集しようとすると下記のようなエラーページが表示されます。
001.png

カスタムHTTPエラーページを利用して、下記のような独自のエラーページを表示するようにします。
002.png

親記事

Laravel5.7で基本的なCRUDを作る

ビューを作る

下記の内容でファイルを作ります。
Laravel Duskによるテストで利用するために.error-codeというCSSクラスを付けています。
:page_facing_up: resources/views/errors/403.blade.php
:page_facing_up: resources/views/errors/404.blade.php
:page_facing_up: resources/views/errors/500.blade.php

エラーページ用の翻訳も追加します。
:page_facing_up: resources/lang/ja.json

基本的にはこれだけでOKです。

ミドルウェアを移す

現状の問題点

404エラーの場合に、以前の記事で作った言語判断用のミドルウェアも実行されません。
具体的には、たとえ上のミドルウェアを使って日本語を表示言語としてセッションに保存していても、404のページでは必ずフォールバック用の言語である英語で表示されます。
403のページでは問題ないのですが…。

解決策

上記のミドルウェアをwebグループからグローバルへと移します。
これで、web用のルートに限らず全てのHTTPリクエストで実行されるようになります。
:link: readouble.com: グローバルミドルウェア

app/Http/Kernel.php
     protected $middleware = [
         \App\Http\Middleware\CheckForMaintenanceMode::class,
         \Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
         \App\Http\Middleware\TrimStrings::class,
         \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
         \App\Http\Middleware\TrustProxies::class,
+
+        // $middlewareGroups['web'] から移動
+        // 参照: https://laracasts.com/discuss/channels/laravel/getting-authuser-on-custom-404-page/replies/293136
+        \App\Http\Middleware\EncryptCookies::class,
+        \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
+        \Illuminate\Session\Middleware\StartSession::class,
+        \App\Http\Middleware\CheckLocale::class, // 独自ミドルウェア
     ];
 
     protected $middlewareGroups = [
         'web' => [
-            \App\Http\Middleware\EncryptCookies::class,
-            \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
-            \Illuminate\Session\Middleware\StartSession::class,
             // \Illuminate\Session\Middleware\AuthenticateSession::class,
             \Illuminate\View\Middleware\ShareErrorsFromSession::class,
             \App\Http\Middleware\VerifyCsrfToken::class,
             \Illuminate\Routing\Middleware\SubstituteBindings::class,
-            \App\Http\Middleware\CheckLocale::class,
         ],

ひとりでずっと悩んでいましたが、全ての答えは下記のページに載っていました。
もっと英語に抵抗感がなくなるように、気軽に英語のページを検索できるように勉強しなければいけませんね…。

:link: Laracastsでの質問: Getting Auth::user() on custom 404 page.

8
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?