Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
1
Help us understand the problem. What is going on with this article?
@kakqun

Laravelでエラーページに対してリダイレクトを設定する

More than 1 year has passed since last update.

はじめに
Laravelで開発している時に、エラーページが出た際に指定のページにリダイレクトをしたかったのですが、Laravelのバージョンが古い事もあり、解決するのに時間がかかったので書いておきます。

やりたい事
・ユーザーが存在しないページにアクセスした時に、そのままエラー画面を表示するのではなく、指定のページにリダイレクトさせる。

バージョン
PHP 7.2.7
Laravel Framework 5.4

やった事
Handller.phpにステータスコードを指定してあげて、指定ページにリダイレクトさせる。

app/Exceptions/Handler.php
public function render($request, Exception $exception) {
  if($exception->getStatusCode() == 404) {
    return redirect('URL');
  }
  return parent::render($request, $exception);
}

これで無事に(?)リダイレクトするようになりました。
まぁ、通常だったらカスタマイズした404ページを表示する方が殆どだと思いますが・・。
てっきり、ルーティングを指定するweb.phpで管理するのかと思ったけど、エラーを認識するステータスコードを取得する方法が分からずで時間がかかりました。

っとしばらくするとこんなエラーが・・。
[error] 27225#27225: *59524 FastCGI sent in stderr: "PHP message: PHP Fatal error: Uncaught Error: Call to undefined method Symfony\Component\Debug\Exception\FatalThrowableError::getStatusCode() in /var/www/inquiry/app/Exceptions/Handler.php:56

HTTP以外の例外が来た時にgetStatusCode()を使うとエラーになるらしい。
なので、それを判断する条件分岐を追加しました。

なので、最終的には以下のコードに。

app/Exceptions/Handler.php
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で任意のエラー画面を出すときに注意した方がいいこと

1
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
kakqun

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
1
Help us understand the problem. What is going on with this article?