cakePHPを使ってみる。
PHPカンファレンス2009(前回の記事)でも使用者が一番多かったフレームワーク。
MVCのフレームワーク使ったことある人にはわかりやすいディレクトリ構成。

慣れるまでのメモをつらつら。

基本構成(post_typesテーブルの場合)

コントローラURL: (複数)/post_types/メソッド名/パラメータ
コントローラ: (複数)PostTypesController (extends AppController)
モデル: (単数)PostType (extends AppModel)
ビュー: (複数)app/views/post_types/各メソッド.ctp

モデル

  • テーブルの主キーは、"id"というフィールドで、primary、auto_increment で作るのが基本。
  • "モデル名_id"というフィールドを作るだけで、他のテーブルモデルへの外部キーとして設定。 例:users テーブルの中に、 "post_id" を作成  ⇒ posts テーブルの id を参照。 "post_type_id" を作成 ⇒ post_types テーブルの id を参照。
  • "created" (DATETIME)というフィールドを作成するだけで、新しいデータが入ると時間が自動的に記録。
  • "modified" (DATETIME)というフィールドを作成するだけで、データが更新されるたびに時間が自動的に記録。
  • "updated" (DATETIME)というフィールドを作成するだけで、データが更新されるたびに時間が自動的に記録。
  • "title"というフィールドを作ると、そのページの標準のタイトル名として利用される。
  • "name"や"title" というフィールドを作ると、外部から参照された場合に(指定がなければ)その値がセレクトボックスなどの「選択項目名」として自動的に利用される。(言い換えると、generateList()の引数が指定されていない場合にはこのように動作するということになります。)どちらもなければ、idの値がインデックスと項目名の両方に入ります。(このあたりの処理は、model_php4.phpと model_php5.php に書かれています。)

ビューを出力する必要がないメソッドの場合

<?php
$this->autoRender = false;
?>
あれ、絶対テーブル必要なの・・・!?って思ってしまったから これもメモ。

テーブル未使用モデル、モデル未使用コントローラ

・DBを使用しないモデル⇒$useTable = false;
・モデルを使用しないコントローラ⇒ var $uses = array();、または var $uses = nullでOK。