http://wiki.cakephp.org/tutorials:blog_tutorial_-_1
※注:現在は、http://manual.cakephp.org/chapter/20 が最新版のようです。※
しかし、この記事、「マジックを見せるけど、たねあかしはしない」ようなところがあるので、「こんなに簡単に作成できるのか〜」と思わせるのと同時に、「どうしてこう動くようになるのか、よく分からなかった」と感じてしまう人も多いようです。
例えば、最初の部分で、モデルを作るには、
class Post extends AppModel
{
var $name = 'Post';
}
とすればよいとあります。これを見て、「クラスを作ったのに、中身が変数一個なんておかしい」と思う人も結構いるわけです。
実は、「実際のプログラムでは、ここにどんどん自分のコードを追加してゆくことになる」んですが、何も追加しなくても、「既に機能が追加されているので、ある程度のことはできてしまう」というのが事実です。
"extends AppModel"というのがミソで、AppModel という基本クラスの持っている性質をすべて受け継いでいます。
ですから、すでに下記のような関数が使えるようになっています。
(Model に関するAPIの解説は、http://api.cakephp.org/class_model.html にあります。)
$this->Post->findAll(...); //すべてのデータを取得
$this->Post->find(...); //条件で検索
$this->Post->findAllByフィールド名(..); // 例えば、name というデータベースフィールドであれば、 $this->findAllByName('山・太郎'); で検索できる。
$this->Post->findNeighbours(...); // その条件のお隣さんを見つけてくる(次へ>などの表村用)
$this->Post->field(...); //あるフィールドの情報だけを取得
$this->Post->findCount(...); //件数を取得
$this->Post->generateList(...); //検索データを配列で受け取る
$this->Post->read(...); //あるIDのデータをフィールド情報+データで受け取る
などなどがあります。これだけでも結構なことができてしまいますね。
でも、自分の欲しいメソッドを作成したり、バリデーション(データが正しくなければ警告する・保存するためのルール)を追加したりしたい場合には、Post クラスの中にいろいろと書き込むことになります。
例えば、
class Post extends AppModel
{
var $name = 'Post';
function mymethod(){
//ここに自分の扱いたい内容
}
}
とすれば、 $this->Post->mymethod() という関数の誕生です。
ブログチュートリアルでもう一つ説明がないのは、コントローラのメソッドに対して、$id がどこからやってくるか、という説明です。
例えば、app/controllers/posts_controller.php にこう書けとあります。
class PostsController extends AppController
{
function view($id)
{
$this->Post->id = $id;
$this->set( 'data', $this->Post->read() );
}
}
ここで、なぜか $id という変数がどこからともなく現れているのですが、これはどうなっているんでしょうか。
これを知るには、CakePHP の mod_url の使い方を学ぶことが必要です。
簡単に説明すると、URLは次のようなルールで指定します。
http:// Cakeのパス/コントローラ名/アクション名/変数1/変数2/変数3/...
もし、「該当するURLで村されるファイルが存在しない(=Cakeへの指令だ!)」という時には、CakePHP が自動的にコントローラの該当する指令に振り分け、変数をはめこんで実行する、という流れになります。ですから、
http:// cakeのパス/samples/save/1/2/3/4
とした場合、CakePHP は、「sample コントローラーの save メソッドを実行します。データとしては、1,2,3,4を入れます」
ということになります。
それを
class SamplesController extends AppController
{
function save($id1,$id2,$id3,$id4)
{
echo "このメソッドが実行されます!データは、".$id1."と".$id2."と".$id3."と".$id4."です。";
}
}
などのようにして、コントローラは受けることができます。
こんな説明でいかがでしょうか。少し分かりやすくなったでしょうか……?
次回は、set 命令の秘密に迫ってみたいと思います。
中途半端に知識だけがある者(含む僕)が見ると
なんで?みたいなところがあって苦悶でした^^;
咀嚼していただき、感謝します!