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