Lumenでページが見つからない時に任意のページを表示する



Laravelから派生したライトウェイトフレームワークに当たるlumenですが、
デフォルトのままだとページが見つからない場合、
"Sorry, the page you are looking for could not be found."
と共に"Not found Exception"とエラー画面が表示されます。

( .envのdebugがfalseに設定されていればExceptionは表示されません )

開発中であれば特に問題はありませんが、
本番環境だと404ページ、又はリダイレクトなどの処理が必要になります。

apache, nginxなどのconfigファイルで設定も可能ですが、
今回はフレームワーク側で設定します。

例外時の処理

設定自体は特に必要な複雑なコードを書く必要はなく、
app/Exceptio/Handler.phpファイルに以下の2つのコードを追加するだけです。

use Laravel\Lumen\Exceptions\Handler as ExceptionHandler;
if ($e instanceof NotFoundHttpException) {
   // pageが見つからない時に表示するページ
  return view('404');
}

*フルコード

<?php
//app/Exceptio/Handler.php
namespace App\Exceptions;

use Exception;
use Laravel\Lumen\Exceptions\Handler as ExceptionHandler;

// 例外用のクラスを追加
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;

class Handler extends ExceptionHandler
{
    protected $dontReport = [
        'Symfony\Component\HttpKernel\Exception\HttpException'
    ];
    public function report(Exception $e)
    {
        return parent::report($e);
    }

    // 例外時の処理
    public function render($request, Exception $e)
    {
        // 404ページ処理
        if ($e instanceof NotFoundHttpException) {
            // pageが見つからない時に表示するページ
            // resource/error/404.blade.php
            return view('404');
        }

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

}

404ページではなく、ホームにリダイレクトにさせたい場合は下記になります

if ($e instanceof NotFoundHttpException) {
    //ホーム画面へリダイレクト
    return redirect('/');
}


今回は404時の処理を説明しましたが、同じ要領が様々な例外時の処理が可能です。

*例: 例外発生時にメールを送信するなど

この記事はStack overflowの質問を参考にしました
Creating custom error page in Lumen

この記事のカテゴリ
プログラミング

この記事に付けられているタグ



その他の運営サービス

最新の記事