はじめに
Laravelで開発している時に、エラーページが出た際に指定のページにリダイレクトをしたかったのですが、Laravelのバージョンが古い事もあり、解決するのに時間がかかったので書いておきます。
やりたい事
・ユーザーが存在しないページにアクセスした時に、そのままエラー画面を表示するのではなく、指定のページにリダイレクトさせる。
バージョン
PHP 7.2.7
Laravel Framework 5.4
やった事
Handller.phpにステータスコードを指定してあげて、指定ページにリダイレクトさせる。
public function render($request, Exception $exception) {
if($exception->getStatusCode() == 404) {
return redirect('URL');
}
return parent::render($request, $exception);
}
これで無事に(?)リダイレクトするようになりました。
まぁ、通常だったらカスタマイズした404ページを表示する方が殆どだと思いますが・・。
てっきり、ルーティングを指定するweb.phpで管理するのかと思ったけど、エラーを認識するステータスコードを取得する方法が分からずで時間がかかりました。
っとしばらくするとこんなエラーが・・。
HTTP以外の例外が来た時にgetStatusCode()を使うとエラーになるらしい。
なので、それを判断する条件分岐を追加しました。
なので、最終的には以下のコードに。
public function render($request, Exception $exception) {
if($this->isHttpException($exception)) {
if($exception->getStatusCode() == 404) {
return redirect('URL');
}
}
return parent::render($request, $exception);
}
これで、404ステータスコードが出たページはリダイレクトするようになりました。
補足
ルーティング 5.6 Laravel
Laravelのバージョンが5.6以上だと、フォールバックルートというメソッドが使用できて、
他のルートに一致しないリクエストが来ると実行できるルーティングを設定出来ます。
エラーとログ 5.4 Laravel
上記ソースコードで使用したHandllerクラスは
アプリケーションで発生する例外を管理するクラスみたいです。
参考
Laravelでエラー時に表示するページのカスタマイズ
Laravel5.5で任意のエラー画面を出すときに注意した方がいいこと