CakePHPをApacheで動かすときのリンクの記述方法に関する注意事項(Missing Controller)
CakePHPでハマるポイントとして、
データベース、
コントローラー、
モデル、
ビュー
の名前で、それぞれ単数形、複数形を使い分けないといけないというのは
CakePHPの公式説明書であるCookbookにも書いてある。
CakePHPの規約 — CakePHP Cookbook 2.x ドキュメント
しかし、ここに、記載がないことがある。
それは、Apache(さくらインターネット等)でCakePHPを動かす場合に、
コントローラーのリンクをローワーキャメルケースにしなければいけない、
という点である。
ローワーキャメルケースというのは、複合語の最初の文字を小文字で
書く記法のこと。
例えば、
my_cakes という名前のデータベーステーブルを作った場合、
コントローラーの名前は、
MyCakesController.php
となるのは分かると思う。(ここの名前は通常のキャメルケースで良い)
このコントローラーのビューに
index.ctp
を作ったとしよう。
そうしたら、このビューにリンクを貼るときは、
myCakesController
にしなければいけない。最初の英文字が小文字になっているのがポイントである。
ソースコードにすると、
<?php
$this->Html->link("リンクです",
array(
'controller' => 'myCakes',
'action' => 'index'
));
というような具合である。
このように記述しないと「missing controller(コントローラーがないよ)」
とかなんとかいうエラーが出てしまい、何が悪いんだろう…と途方に暮れることとなる。
直接リンクを書くときは
/myCakesController/index
である。
ちなみにサーバーがnginxの場合は小文字にしなくてもリンクに飛べてしまう。
いずれにせよ、いざというときに様々なサーバーに対応できるために、上記の記法で
リンクのコードを記述しておくのが無難だろう。
2015年2月13日追記
つい最近、Apache環境で、コントローラーがアッパーキャメルケース
(複合語の先頭を大文字で書き始める記法。『MyCake』など。)
でも、リンクに飛べるようになっていることを確認しました。
例えばさくらのレンタルサーバーなどのApacheを使用しているレンタルサーバーでも、コントローラー名をローワーキャメルケースにしなくともリンクに飛べるようになっていたので報告しておきます。