first step CakePHP

CakePHPを使って簡単なアプリを作ってみた。
その中でつまづいたことや分かったことをいくつか。

まず、ネット上でいろいろと調べた結果、
scaffoldを使って簡単にCRUDができるぜ!ってやつがほとんどで、
実際に自分でアプリを書くにはどうしたらいいのよ?
ってのが最初の印象。

その辺はブログチュートリアルが一番詳しくのってると思う。
modelの話はいろいろなところで取り上げられているので、
ここでは特に何も言わないが、
controllerとviewについては、情報を集めるのに苦労した。

まず、controllerは命名規約として〜_controller.phpというファイル名で作る必要があり、〜の部分の頭を大文字にしたものがクラス名となるように作る。
ここまでは、cakeが教えてくれるので問題なかろう。
さて、作ったcontrollerだが、基本的には複数形の名前にしないといけない。
なぜか?
samples_controller.php (クラス名:Samples)
はデフォルトでクラス名の単数形であるmodel、
sample.php (クラス名:Sample)
と関連づく。

なので、上記2つのようにペアで作るのが原則と言える。
が、画面はテーブルより多くなることは当り前で、
そういう場合、それ専用にmodelを作ることは意味がない。

そのため、このcontrollerはデフォルトの命名規約には従わず、もともとあるものを使いますよ。という指定が必要になる。

その場合、controllerのフィールド(クラス変数)に
var $uses = array('Table', 'Table2');
という記述が必要になる。
上の例だと、TableとTable2を使うcontrollerですよ。と言う意味。

これで、modelを作る必要はない。
あとは、ブログチュートリアルにあるとおり、
$this->set('datas', $this->Table->findAll());
なんてやってやれば良い。

ひとつのcontrollerにactionメソッドはいくつでも作れるので、(Struts2をやったことある人はそれと同じだとおもっていい)
欲しいだけ書けばいいだろう。
http://〜〜/controllerName/methodName
でそれぞれアクセス出来る。

さて、あとは、viewだが、これもブログチュートリアルにある通りだ。
setしたデータ(上の例だと'datas')は$datasのように使えるのでそれぞれ表示させてやれば良い。

これで、アクションもviewも自分で作れる。
が、上にRapidなんとかとか下にはCakePHPのロゴが出るなど、
実際には変更しないとダメジャン的なところがある。
これは、ここが詳しいのだが、
「default.thtml を cake/libs/view/templates/layouts から app/views/layouts にコピーし、そのファイルを編集する。」
ことでデザインの変更ができる。

また、自分で作ったクラスとかが使いたい場合、
controllerに直接requireを入れるのではなく、ここ
にあるように、
bootstrap.phpにvendor(~);を追加することで、使えるようになる。
これは便利。

formを作る場合のtips.
これが以外に載ってなかった。気がする。
まず、actionに設定するアドレスは
'./controllerName/methodName'
'controllerName/methodName'のようだ。
で良い。indexメソッドを呼び出す場合は特にメソッド名を書くことは無いので、
'./controllerName'
'controllerName'
でOK。 mod_rewriteが無効で、http://~~index.php/cotroller
なんて呼び出ししている場合でもこれでOK。

あとはcontroller側での値の受け取りだが、
$this->params["form"]["name"]
といった感じで、["form"]に全部収まってる。(POSTの場合)
GETの場合は、["url"]となる。
他のスーパーグローバル変数へのアクセスはここを参照

さて、駆け足で説明してしまったのでわかりにくいところがあると思うが、
CakePHPは慣れれば慣れる程高速開発が出来るスグレものだと感じた。
これは、PHPをやるものであれば必修と言いたい程だ。
MapleEthnaではここまですんなり開発できないだろう。
いや、出来なかった。
はっきり言って、webアプリはDBとの連携が一番のネックである。
そこを強力にサポートしてくれるCakePHPやちいたんは素晴らしい程の開発性を秘めている。