Laravel 8.65/8.66~ 今後は、deprecated エラーでガツンと処理が止まる事はなくなる
まえがき
ここ最近、私も PHP7.3 → 7.4 の移行とかやっていますが、地味に小面倒だったりするのが、deprecated な書き方でエラーとなって、ガツンと処理が止まってしまう事なんですね。
Laravelチームもこの件に限らないと思いますが、PHP8.1対応で、結構奮闘したようです。
本題
という事で、タイトルにもある通り、今後は deprecated なエラーは、ある意味スルーされます。エラーでガツンと止まる事はありません。
ただ、deprecated が発生していることを把握できないのは困ってしまいますので、そこで以下のようにログ設定を変更すれば、deprecated な際に、ログられる事になります。
まず、以下のような記述が加わっているのをチラと確認します。
.env
LOG_DEPRECATIONS_CHANNEL=null
config/logging.php
'deprecations' => env('LOG_DEPRECATIONS_CHANNEL', 'null'),
そして、後は例えば .envで以下のように変えてやります。
.env
LOG_DEPRECATIONS_CHANNEL=stack
これで、deprecated な際に stack チャンネル経由でログられます。
ユーザーが trigger させた deprecated エラーも対象になるので、サクッと以下のように書いて確認できます。
Route::get('/', function () {
trigger_error("deprecated ですよ", E_USER_DEPRECATED);
return view('welcome');
});
テストの際は?
テストの際も上記を踏襲しますが、ただテストの際は、ガツンとエラーにさせる事ができます。それが、以下のやつです。
public function test_example()
{
$this->withoutDeprecationHandling(); // これ
$response = $this->get('/');
$response->assertStatus(200);
}
withoutDeprecationHandling() を付けてやれば、今までのようにガツンとエラー表示させることができます。ログなど見てられないという私みたいな怠け者には、これは便利です。
参考
GitHub: Logs deprecations instead of treating them as exceptions #39219
GitHub: Adds withoutDeprecationHandling #39261
GitHub: [8.x] Logs deprecations instead of treating them as exceptions #5711
間違い等ありましたらコメントお願いします。
Discussion