CakePHP2.2でテーマが使えなかった問題を自己解決できた

CAkePHP2.2を勉強中、テーマの部分でおおはまりした。2日くらいはまってネットを調べたりして、いろいろ試したのだけどうまくいかなかった。詳しくはこちら


もう諦めて先に進むことにしたのだけど、うまくいかない部分があって気になってしょうがない。お正月セールでブックオフなどをまわり、ついでに技術書の品ぞろえがいい本屋によって、立ち読みしてヒントを探す。ネットや書籍でもそうなのだけど、同じ内容を言っているのに書き方などによって理解できる時とできない時がある。だから、おもいっきりこれといった正解に行き当たるとも思わなかったのだけど、解決の糸口でも見つかればと思った。まだCakePHP2.2対応の書籍は少ない。

CakePHP2 実践入門 (WEB+DB PRESS plus)

CakePHP2 実践入門 (WEB+DB PRESS plus)

ようやく見つけたこの本もCakePHP2.2対応ではあるものの、僕がはまったテーマの部分には1ページ分くらいしか書かれていない。テーマなんて細かく説明するほどのものではないという意味か。それとも詳しく説明しなくてもハマるわけないってことか。デバックもできないと困ったものだなぁ。
何度もテーマの部分について読み返していると、app/View/Themed/Sample/webroot/css/cake.generic.cssがなければデフォルトのView/app/webroot/cake.generic.cssが適用されると書かれている。前の本でもそのようなことが書かれていて、ここがうまくいっていないことまでは分かっているのだけど。ちなみにapp/View/Themed/Sample/Hello/index.ctpがないとデフォルトのapp/View/Hello/index.ctpが読み込まれる。こちらはうまくいっている。何が違うのだろうか。
この本ではThemedの最初は大文字だった。あとこの本と前の本での実験として違うのは、テーマ用のディレクトリ名だった。キャメル記法を使って2単語をつなげたhelloThemeとPostというのが参考ソースとして違う。そういえばテーマ名になるディレクトリの部分はいろいろ変更して実験していないことを思い出した。
このようにヒントを与えてくれた本なので、一応買った。他の部分でも役に立つと思う。


さて、家に帰ってきてからさっそく気になる部分のテーマのディレクトリ名を変更してみる。helloThemeからhelloに変更してみた。キャメル記法の2単語はだめなのかと思ったのだ。表示に変化なし。さらにhelloの最初を大文字にしHelloにしたところ、ようやく表示が変更されテーマのcssが適用されたことがわかった。もうちょっと試しているとどうやら2単語だとかキャメル記法の問題ではなく、ディレクトリ名の最初は大文字という問題だったようだ。
この後フォームで入力し結果を表示するだけのプログラムを本を参考にやったのだけど、ここでもはまった。それもSendFormかsendFormかという問題だった。これはメソッドだったのだけど、メソッド名はキャメル記法で書くとあり小文字始まりと大文字始まりのどちらかで書くと説明があった。しかし、コントローラ側で大文字の形でかかないとエラーがでていた。参考に買った本の最初の方の段階で命名ルールの大事なCakePHPのメソット名やディレクトリ名で誤植が2つもと思ったけど、もしかするとこれはCakePHP2.2になり命名ルール部分がさらに厳しくなったのかもしれない。ただネットでCakePHP2.1から2.2への変更点でそういう変更を見つからなかったので、もしかするとサーバ側のphpなどの設定かもしれない。難しい問題です。とにかく本のソース通りにプログラムを書いて動かない時は、ファイル名やメソッド名の指定、あとはディレクトリ名などで最初の文字が大文字か小文字かを確認しようと思った。