Version 2.7 (MIT License)
— y2sunlight 2020-03-18
関連記事
リンク
テストプログラムの所在
{Project Folder}\test\
どんなプログラム開発にも集約例外ハンドラーは必要です。それは、いわゆる Uncaught Exception Handler
とも呼ばれ、誰にも補足されなかった例外を処理するハンドラーのことです。この集約例外ハンドラーのお陰で、開発時の問題の早期発見や、運用時の例外発生時のログ収集が可能になります。
Whoopsは、PHPのエラーハンドラーフレームワークで、非常に優れたエラーインターフェイスを提供してくれます。Whoopsのお陰で、PHPが本来提供しているUncaught Exception Handler
用の set_exception_handler() を書かなくても済みます。本当に pretty cool な存在です。
Whoopsは、Laravel5.5以上には既に組み込まれており、CakePHP、Zend Framework、FuelPHP、Phalcon、Slimなどに統合する方法はそれぞれのコミュニティで手順が公開されており、PHPのデバッグツールとしてのWhoopsの選定に関しては異論の余地がありません。
composer require filp/whoops
Using version ^2.7 for filp/whoops ./composer.json has been updated Loading composer repositories with package information Updating dependencies (including require-dev) Package operations: 1 install, 0 updates, 0 removals - Installing filp/whoops (2.7.1): Downloading (100%) filp/whoops suggests installing symfony/var-dumper (Pretty print complex values better with var-dumper available) filp/whoops suggests installing whoops/soap (Formats errors as SOAP responses) Writing lock file Generating autoload files 1 package you are using is looking for funding. Use the `composer fund` command to find out more!
Note:
Eclipse起動中にパッケージを取得した場合は、プロジェクト・エクスプローラー内の[プロジェクト(apricote)]を右クリックして[リフレッシュ]を選択して下さい。また、新しく取得したパッケージのインテリセンスが有効にならない場合は、プロジェクトのビルトまたはクリーン&ビルドを行ってビルドリストの更新を行って下さい。
パッケージの取得が終わると composer.json
の require
に以下が追加されます。
{ "require": { "filp/whoops": "^2.7" } }
パッケージのテストフォルダ(test\
)に、テスト用のコード(whoops.php
)を作成し実行します。この例では、DEBUG_MODE
が true
の場合はデバッグ用の PrettyPageHandler()
が、false
の場合は本番用のカスタムハンドラーが呼び出されます。PrettyPageHandler()
は、例外や環境変数などの障害の切り分けに必要な多くの情報を綺麗に整形して表示してくれます。詳細はコード内のコメントを参照して下さい。
<?php require __DIR__.'/../vendor/autoload.php'; // デバッグモード有効 const DEBUG_MODE = true; // 本番モードの例外集約ハンドラーの定義 $UncaughtExceptionHandler = function ($exception, $inspector, $run) { // エラーログの出力 // Log::error($exception->getMessage()); // エラ画面の表示 var_dump($exception->getMessage()); return Whoops\Handler\Handler::DONE; }; // エラーハンドラーをデバッグモードと本番モードで切り替える $whoops = new \Whoops\Run; if(DEBUG_MODE) { $whoops->pushHandler(new \Whoops\Handler\PrettyPageHandler); } else { $whoops->pushHandler($UncaughtExceptionHandler); } $whoops->register(); // 例外の発生!! throw new Exception("Whoops!!");
デバッグモードの表示( DEBUG_MODE = true
) - PrettyPageHandler()
本番モードの表示( DEBUG_MODE = false
) - カスタムハンドラー
D:\usr\ws2019\apricot\test\whoops.php:10:string 'Whoops!!' (length=8)