Laravel5.7: エラーページを作る
現在、オーナー以外の人が記事を編集しようとすると下記のようなエラーページが表示されます。
カスタムHTTPエラーページを利用して、下記のような独自のエラーページを表示するようにします。
親記事
ビューを作る
下記の内容でファイルを作ります。
Laravel Duskによるテストで利用するために.error-code
というCSSクラスを付けています。
resources/views/errors/403.blade.php
resources/views/errors/404.blade.php
resources/views/errors/500.blade.php
エラーページ用の翻訳も追加します。
resources/lang/ja.json
基本的にはこれだけでOKです。
ミドルウェアを移す
現状の問題点
404エラーの場合に、以前の記事で作った言語判断用のミドルウェアも実行されません。
具体的には、たとえ上のミドルウェアを使って日本語を表示言語としてセッションに保存していても、404のページでは必ずフォールバック用の言語である英語で表示されます。
403のページでは問題ないのですが…。
解決策
上記のミドルウェアをwebグループからグローバルへと移します。
これで、web用のルートに限らず全てのHTTPリクエストで実行されるようになります。
readouble.com: グローバルミドルウェア
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,
],
ひとりでずっと悩んでいましたが、全ての答えは下記のページに載っていました。
もっと英語に抵抗感がなくなるように、気軽に英語のページを検索できるように勉強しなければいけませんね…。
Laracastsでの質問: Getting Auth::user() on custom 404 page.
Author And Source
この問題について(Laravel5.7: エラーページを作る), 我々は、より多くの情報をここで見つけました https://qiita.com/sutara79/items/534b03b718cc131f8276著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .