先日違うシステム構築をcakePHP4で行っていたお話です。
いつもテスト環境はxamppで作業しており、PHPのバージョンとかも気にしながら行っているのですが、先日ある程度出来上がったので、ドメイン取得した後に本番環境のディレクトリを割り当て、そのディレクトリにFTPでアップロードし、ブラウザで確認してみました。
すると…
Table class for alias infos could not be found.
またか…
このエラーメッセージにはいつも苦しめられるんです。
その名前のテーブルが見つかりませんというエラー内容なんだそうですが、これが発生する原因が結構色んな事であったりするんです。
システムのファイルをアップする際に、tmpディレクトリ内にあるキャッシュが残ったままで起きているとかもあったり、前回は原因が分からなかったため再度コマンドでモデルファイルを生成したりと。
しかし今回はFTPでサーバーにアップしただけでssh接続の準備などは出来ておらず生成は不可能。
今回はどんな原因でこのエラーメッセージが表示してんのよ…
エラー画面が表示してる左側のメソッド実行履歴をたどっていくとちょっと思った部分を発見。
APP/Controller/Admin/InfosController.php:28
あれ? コントローラーまではちゃんと実行してくれてるんだなと確認できました。じゃ、今回もモデルファイルがない?と確認しましたが、src/Model/Table/InfosTable.php はある。念のため再度アップロードしました。
しかしやはりエラーは消えず。
ではInfoController.phpの中身を確認してみます。そのテーブルが見つかりませんとエラー吐き出しているであろう部分を。
$this->Info = TableRegistry::get('infos');
テスト環境ではここではちゃんと読み取って動作しているんだけど、cakePHPは命名規則が厳しいと言われているフレームワーク。
もしかすると…
infos → Infos に変更してみる
$this->Info = TableRegistry::get('Infos');
なんと!エラーが消えました!!
テスト環境では問題なかった部分が、本番環境ではエラー対象となっていたようです。
ファイルを読み込む構文はテスト環境ではみなしとされていたのか…
曖昧にせず、ちゃんとしっかりと指定しなさいねというこですね。勉強になりました。