Laravelの例外処理ってどうなってんだ?
こんな疑問に対しての記事です!
この記事を書いている僕(@Shoot58153748)は、
社会人1年目で大手SIer退職→プログラミング未経験から独学→Webエンジニア
という経歴を持ち、
2019年12月現在メガベンチャーの社内スタートアップの部署で
エンジニア(1年目)をしてます。
本ブログでは、
プログラミング未経験からメガベンチャーへの転職を成功させた経験・ノウハウ
Webエンジニアになってから学んだこと
を発信しています!
本記事のテーマは
「例外処理」
です。
ぜひ参考にしてください!
ツイッター風SNSアプリを作ろう!
https://kumatetsublog.com/laravel-tutorial-web-application
Github
https://github.com/Shuto-san/laravel-vue-docker
例外処理とは?
言葉の通り、例外、つまり特別なエラーが起きた時の処理のこと。
オブジェクト指向プログラミング言語(Java、Ruby、その他多数)には必ず存在する機能です。
特別なエラーとは具体的に
ネットワーク障害やデータベースのデッドロック
などが挙げられます。
例外処理と言うと
Javaの「try catch構文」が有名ですが、
もちろんPHPにも「try catch構文」があります。
例えば、
try句内にネットワークに接続しに行く処理を書いてあるとして、
エラーが起きた場合、catch句内の処理が走る
といった使い方ですね。
元来、例外処理は特別なエラーが起きそうなところに自らtry catch句を付け足すものです。
しかしLaravelでは、全例外をCatchしてくれる仕組みがあります。
Laravelの例外処理とは
Laravelは新たにプロジェクトを開始する時点で、エラーと例外が設定されています。App\Exceptions\Handler.php
クラスは、
アプリケーションで発生する全例外をログし、ユーザーへ表示するためのクラスです。
全例外なので初心者からしたら便利ですよね。(先ほど説明した例外はなんだったんだという感じですが)
今回は今後のアプリ開発を効率化するために例外処理をカスタマイズしていきます。
例外時にエラーログを出力
エラーログとは、エラーを記録することです。
Webアプリケーション開発では、エラーとの戦いでもあります。
本番環境でのバグ以外にも、開発を進めるにあたり数々のエラーに直面します。
エラーが起きた状況や原因をファイルに書き込んで記録することで、
開発の加速やエラー特定を早めることができます。Handler.php
を編集していきましょう。
- App\Exceptions\Handler.php
use Illuminate\Support\Facades\Log; // 追記する
class Handler extends ExceptionHandler
{
...省略...
/**
* Render an exception into an HTTP response.
*
* @param \Illuminate\Http\Request $request
* @param \Exception $exception
* @return \Illuminate\Http\Response
*/
public function render($request, Exception $exception)
{
// 例外時のメッセージを取得する
$errorMessage = $exception->getMessage();
// エラーログ出力する。(リクエストURLとエラーメッセージ)
Log::error("Error occured : request_url=" . $request->fullUrl() . ', errorMessage=' . $errorMessage);
// エラー画面を返す(ログイン認証で指定の遷移先にうまく遷移されない)
// return response()->view("common/error")->setStatusCode(500);
return parent::render($request, $exception); // Laravelの標準Auth機能を用いる場合はこちら
}
renderメソッド内を書き換えました。
今回Logファサードクラスを使用しているので、最初にuseで宣言してあげる必要があります。(それかLogの前に\を入れる。ex: \Log)
今回のケース以外にも、
その他にもクラスを使用する場合、useしてあげるのを忘れずに。
返すためのエラー画面を作ります。(ファイルの中身は空)
追記(20200325):Laravelの標準Auth機能を用いる場合、parent::render($request, $exception);
をリターンしてあげる。(じゃないとログイン認証時にリダイレクトがうまくされない)
以下のコマンドを打ちましょう。
mkdir resources/views/common/error.blade.php
これでアプリケーションのどこかで例外的なエラーが発生した場合、
真っ白のエラー画面が表示され、エラーメッセージを見ることができます。
Laravelを扱う上でこのエラーハンドリング設定は必須です。
この記事を読んだ方は是非とも設定を真似て
アプリケーション開発を加速させていきましょう!
次回は、「Ajax通信」について解説します!
Webアプリ開発っぽくなってきました!
↓↓
それではまた!
コメント