CakePHP 3 で Deprecated エラーが表示されない!?を解決する2つの方法
はじめに
CakePHP 3 のバージョンアップ作業をしていると Deprecated エラーが出ることがよくあります。しかし今回、 XAMPP を使っていて Deprecated エラーメッセージが画面に表示されない現象がおきました。
もう少し詳しく状況を書くと、php.ini の error_reporting と app.php の erroLevel は E_ALL、app.php の debug は true で、logs/error.log には Deperecated エラーが出力されています。
今日は CakePHP 3 で Deprecated エラーが表示されない場合の解決方法を2つご紹介します。動作確認で使用したのは CakePHP 3.8.2 です。
1. 実行環境
データベースに articles テーブルを追加し、コントローラ、モデル、テンプレートを Bake で作ります。そして Deprecated エラーを出すために、Articles モデルを下記のように変更しました。
public function initialize(array $config)
{
parent::initialize($config);
// $this->setTable('articles'); ←コメントアウト or 削除
$this->table('articles'); // ←追加
...
}
2. DebugKit で確認
一番お手軽なのが DebugKit で確認する方法でしょうか。画面右下に表示される CakePHP のロゴマークをクリックし、「Deprecations」をクリックしてください。
この方法は簡単ですが、いちいちメニュを開く必要があったり、画面表示することなくリダイレクトするケースなどで気づかない場合があります。そこで次に、Deprecation エラーを画面に表示する方法をご紹介します。
3. 画面に出力(DebugKit からは消える)
DebugKit で「Deprecations」を表示しない設定にすると、画面に Deprecated エラーが表示されるようになります。
app.php に下記を追記してください。
return [
...
'DebugKit' => [
'panels' => [
'DebugKit.Deprecations' => false
]
]
]
- Configuration (CakePHP DebugKit 3.x Cookbook)
- https://book.cakephp.org/debugkit/3/en/index.html#configuration
4. おわりに
Deprecated を画面に表示する方法は CakePHP 本体(DebugKit)のソースコードを、「Deprecated」や「error_reporting」などのキーワードで検索し、分析しながら試行錯誤でみつけました。
具体的には下記コードが参考になりました。
if (!empty($service->getConfig('panels')['DebugKit.Deprecations'])) {
// 色々な処理
}
根本的な原因までは調べていないので、もしかしたらより良い解決方法があるのかもしれませんが、それが分かるまでは上記で対応しようと思います。