世界を旅して暮らしたい放浪エンジニアブログ

Laravelのエラーページについて

Laravelのエラーページをカスタマイズする際の注意点をまとめます。

[ 目次 ]

はじめに

こんにちは、香港に住んでいるWEBデベロッパーのなかむ(@nakanakamu0828)です。

今回はLaravelのエラーページについて記事を書いていきたいと思います。
通常 resources\views\errors にステータスコードをファイル名としたエラーページを作成することでカスタマイズできます(ex. 404.blade.phpのようなエラーページのテンプレートを作成する)。

ただ、今回はMulti-Authで複数のユーザー認証機能が存在し、それぞれ用途とデザインを分けているため、エラーページもそれぞれ分けたいと思いました。
なので、App\Exceptions\Handlerを修正し、それぞれ用途ごとにテンプレートを表示するように制御しました。

認証機能は3つに分けています

  • 一般ユーザー
  • 企業ユーザー
  • 管理画面のユーザー

resources\views配下のディレクトリ構成も3つに分けていて

  • 一般ユーザー : views\app
  • 企業ユーザー : views\company
  • 管理画面のユーザー : views\admin

としています。

※ 求職サイトを作っているので、「求職者がログインする画面」と「企業が求人を作成したりする管理画面」、「運営者がマスターデータの管理やサポート対応する管理画面」の3つが必要になりました。今回の記事はその案件がきっかけです。

■ 環境

ライブラリ バージョン
PHP ^7.1.3
Laravel 5.7.*

App\Exceptions\Handlerを修正

今回は以下のようにrender関数を修正しました。

public function render($request, Exception $e) {
    return parent::render($request, $e);
}

↓

public function render($request, Exception $exception)
{
    if($this->isHttpException($exception)) {
        // URLのサブディレクトリで機能を分けているので、URLの構成からどのテンプレートにするか判断
        $prefix = 'app';
        if ($request->is('company*')) {
            $prefix = 'company';
        } elseif ($request->is('admin*')) {
            $prefix = 'admin';
        }

        // ステータスコード毎にページを変更
        // view関数の中でステータスコードを設定するのを忘れないように・・・、200でレスポンスが返されます
        // 403
        if($exception->getStatusCode() == 403) {
            return response()->view($prefix . '.errors.403', [], $exception->getStatusCode());
        }
        // 404
        if($exception->getStatusCode() == 404) {
            return response()->view($prefix . '.errors.404', [], $exception->getStatusCode());
        }
        // 500
        return response()->view($prefix . '.errors.500', [], $exception->getStatusCode());
    }

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

エラーページのディレクトリ構成

エラーページは以下のようなディレクトリ構成でファイルを作成しました。

resources/view/
 |
 + - app/errors/
 |     |
 |     + - 403.blade.php
 |     + - 404.blade.php
 |     + - 500.blade.php
 |
 + - company/errors/
 |     |
 |     + - 403.blade.php
 |     + - 404.blade.php
 |     + - 500.blade.php
 |
 + - admin/errors/
 |     |
 |     + - 403.blade.php
 |     + - 404.blade.php
 |     + - 500.blade.php 

最後に

Laravel5.7からデフォルトのエラーページが変わりました。結構素敵な画面だと思うので、個人開発のプロジェクトとかならそのままでもいいのかなと思ったりしました 笑

参考URL

Laravelでエラー時に表示するページのカスタマイズ

こちらの記事を見ていて、「あれ?エラー画面なのにステータスコード 200で返されてるなー」とか思い、私のやったことも記事としてまとめておこうと思った次第です。

前のページ

次のページ

Profile

なかむ🇭🇰Webデベロッパー

なかむ🇭🇰Webデベロッパー

香港在住4年目になるWEBエンジニアのなかむです。 現在は、LaravelやRailsを利用したWEB開発を中心にエンジニアをしています。 顧客は全て日本の企業になります。リモート開発にて各企業様の支援を行なっております

プロフィール詳細はこちら

Latest Posts