【Laravel】Handler.phpについてキャッチアップ

Laravel

先日Handler.phpファイルについて触っていたのですが、あまりよく理解していなかったので、備忘録として残しておきます。

Laravelのバージョンは10を想定しています。
(バージョンによって使っているメソッドが変わってくるのでご注意ください)

Handler.phpとは

例外処理が起きた時についての取り扱いを設定することができる。
Handler.phpはApp/Exceptionsディレクトリの中にあります。

registerメソッドとは

カスタム例外レポートとレンダリングコールバックを登録します。
ここのメソッド内で設定することで、例外レポートを、sentryなどのサードパーティーを使って送信することができます。
ちなみにregisterメソッドはLaravel8から登場し、以前はreportメソッドがありました。

例えば、sentryの場合だと、以下のように記述します。(予めsentryをインストールすることはお忘れなく!)

composer require sentry/sentry-laravel //インストール
use Sentry\Laravel\Integration;

public function register(): void
{
    $this->reportable(function (Throwable $e) {
        Integration::captureUnhandledException($e);
    });
}

registerメソッド内で、reportableを使うことで特定の例外を報告する際に実行できるクロージャを登録できるようになります。

$levelsについて

Handler.phpに予めある変数です。
特定の例外を記録するログレベルを設定できます。

protected $levels = [
    PDOException::class => LogLevel::CRITICAL,
];

$dontReportについて

無視して良い例外についてはこちらに記載します。

protected $dontReport = [
    InvalidOrderException::class,
];

reportヘルパについて

handerクラスとは逸れますが触れておきます。
reportヘルパを使うと、ユーザー側に表示をさせずに例外を報告することができます。

public function isValid(string $value): bool
{
    try {
        // 値のバリデーション…
    } catch (Throwable $e) {
        report($e);

        return false;
    }
}

コメント

タイトルとURLをコピーしました