CakePHPで開発を始めたばかりの頃は、命名規約をあまり気にせずに関数やctpファイルを量産しておりましたが、そのせいで「Missing Template」エラーと出会ったので、対処した時のお話をします。
(CakePHP v3.4.4)
「Missing Template」エラー時の状況
エラーが出た時に作成した関数は「viewAll()」、対応するテンプレートファイル名は「viewAll.ctp」でした。キャメル記法で命名しました。
エラー画面は以下です。
いや、確かに関数名とビューのテンプレートファイル名を同じ名前にしているぞ!と思いながらエラー内容をよく見てみました。
なんか「view_all.ctp」をちゃんと作ったか確認して!と言われているようです。
ビューのテンプレートのファイル名
CakePHP Cookbookによると
ビューのテンプレートファイルは、それを表示するコントローラーの関数に合わせた、 アンダースコアー記法で命名されます。
出典:CakePHP Cookbook
とのことです。
アンダースコア記法で「view_all.ctp」を用意しろということか!
ファイル名を「view_all.ctp」に変更して解決。
これまで関数名に複合語を使用していなかったため、関数名とビューのテンプレートファイル名を、まったく同じ名前にして動いていたので、そういうもんだと思い込んでいたのが落とし穴でした。
補足
今回の件を調べてく上で、他にも似たような現象が起きるところを見つけました。
ビューのテンプレートファイル名だけでなくURLも少し記法が変換されるそうです。
例えば「AdminArticles」コントローラーに「viewAll」関数を作成したとします。
その関数にアクセスする時のURLは以下となります。
「/admin-articles/view-all」
ハイフンで区切るチェインケースで表記されるそうです。
参考: CakePHP Cookbook 「CakePHP の規約 > コントローラー名と URL」
まとめ
コントローラーの関数名に対し、ビューのテンプレートファイル名はアンダースコア記法で命名しなければならない。
「Missing Template」エラーが出たとしても、エラーの中身を見れば求められているファイル名とパスが表示されるので原因は簡単に追求できそうです。
飲食業界からIT業界に転身してきて現在2年目です。PHPの経験がメインとなります。これまで自分がPHPを扱ってきた上で、モヤモヤしてきたことをメインに記事にしていきますのでよろしくお願いいたします。