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

現在、オーナー以外の人が記事を編集しようとすると下記のようなエラーページが表示されます。
![001.png](https://qiita-image-store.s3.amazonaws.com/0/27816/7ec70b03-2f14-5202-e83a-b73e0a864685.png)

[カスタムHTTPエラーページ](https://readouble.com/laravel/5.7/ja/errors.html#custom-http-error-pages)を利用して、下記のような独自のエラーページを表示するようにします。
![002.png](https://qiita-image-store.s3.amazonaws.com/0/27816/586f26ec-b1ad-79ef-eee5-bfbf88c1a3cd.png)


# 親記事
[Laravel5.7で基本的なCRUDを作る](https://qiita.com/sutara79/items/ef30fcdfb7afcb2188ea)


# ビューを作る
下記の内容でファイルを作ります。
Laravel Duskによるテストで利用するために`.error-code`というCSSクラスを付けています。
:page_facing_up: [resources/views/errors/403.blade.php](https://github.com/sutara79/demo-laravel-crud/blob/5.7/resources/views/errors/403.blade.php)
:page_facing_up: [resources/views/errors/404.blade.php](https://github.com/sutara79/demo-laravel-crud/blob/5.7/resources/views/errors/404.blade.php)
:page_facing_up: [resources/views/errors/500.blade.php](https://github.com/sutara79/demo-laravel-crud/blob/5.7/resources/views/errors/500.blade.php)

エラーページ用の翻訳も追加します。
:page_facing_up: [resources/lang/ja.json](https://github.com/sutara79/demo-laravel-crud/blob/5.7/resources/lang/ja.json#L75)

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


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

## 解決策
上記のミドルウェアをwebグループからグローバルへと移します。
これで、web用のルートに限らず全てのHTTPリクエストで実行されるようになります。
:link: readouble.com: [グローバルミドルウェア](https://readouble.com/laravel/5.7/ja/middleware.html#global-middleware)

```diff: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.](https://laracasts.com/discuss/channels/laravel/getting-authuser-on-custom-404-page/replies/293136)