🎄

CakePHP4.4のErrorHandlerの非推奨エラーについて

2023/12/17に公開

この記事はコネヒトアドベントカレンダー2023の17日目の記事になります。

CakePHP4.4からErrorHandlerは非推奨

ErrorHandler(BaseErrorHandoerのsubClass)を使用している場合は以下の非推奨のエラーが表示されます。

"Use of `BaseErrorHandler` and subclasses are deprecated. 
 Upgrade to the new `ErrorTrap` and `ExceptionTrap` subsystem. 
 See https://book.cakephp.org/4/en/appendices/4-4-migration-guide.html"

なぜErrorTrapとExceptionTrapに置き換わるかの詳細は過去に書いたのでよければご覧ください。
https://zenn.dev/ryoutaka/articles/b0903a1d594560

移行ガイドの通りに置き換える

bootstrap.phpにエラーや例外に関する設定をErrorHandlerのregister関数を通して登録しているのですがそこを公式の移行ガイドに従って置き換えてみます

use Cake\Error\ErrorTrap;
use Cake\Error\ExceptionTrap;

(new ErrorTrap(Configure::read('Error')))->register();
(new ExceptionTrap(Configure::read('Error')))->register();

https://book.cakephp.org/4/ja/appendices/4-4-migration-guide.html#errorhandler-consoleerrorhandler

これでOK!...とはならない場合ももちろんあります。
当然ですが他にErrorHandlerを使用している箇所がある場合は非推奨エラーが出てきます。

例外やエラーのハンドリングを独自にカスタマイズする場合にErrorHandlerを継承したサブクラスをErrorHandleMiddlewareに設定する方法もあると思いますがその場合はErrorHandleMiddlewareから非推奨のエラーが出ます。

https://github.com/cakephp/cakephp/blob/e85d5861d3df63017869f4c0cfb87b54fcd9ed8a/src/Error/Middleware/ErrorHandlerMiddleware.php#L120-L132

ExceptionTrapのインスタンスが設定されるように記述がありますね。

愚直にExceptionTrapに置き換えることができれば楽ですが過去記事にも書いた通り従来のErrorHandlerとExceptionTrap(ErrorTrap)は厳密には役割が違う場合もあるので単純に置き換えるだけではなく、何か別の修正を加える場合もあるのかなと思いました。

最後に

こういう時にテストが書いてあると安心だなと思いました。

Discussion