2011年2月15日火曜日

CakePHP ケーキを焼いてみる

CakePHPではcakeをbakeを利用することで、コードを生成してくるらしい。まずはちゃんと調べる前に使ってみる。習うより慣れよ!ちょっと使い方違うかな^^;

とりあえず、consoleディレクトリに実行ファイルあるのでさっそく実行してみる。

$ cd cake/console
$ ./cake bake
Welcome to CakePHP v1.3.7 Console
---------------------------------------------------------------
App : app
Path: /var/www/html/cakephp/app
---------------------------------------------------------------
Interactive Bake Shell
---------------------------------------------------------------
[D]atabase Configuration
[M]odel
[V]iew
[C]ontroller
[P]roject
[F]ixture
[T]est case
[Q]uit
What would you like to Bake? (D/M/V/C/P/F/T/Q) 
> Q
対話シェルが起動した。まずは一旦止めて、アプリケーションを生成する。アプリケーション名はmyappとする。
 $ ./cake bake -app /var/www/html/myapp
対話シェルを進めていくとアプリケーションに必要なディレクトリ・ファイルが生成される。対話で聞かれるのはデータベース周りの設定。
ブラウザでアクセスすると、「Sweet, "Myapp" got Baked by CakePHP!」と表示される。すべて緑じゃないならここで解決しておく。
アプリケーションができたので、次にModelを作る。
> M
---------------------------------------------------------------
Bake Model
Path: /var/www/html/myapp/models/
---------------------------------------------------------------
Your database does not have any tables.
テーブルは事前に準備しておく必要があるのね。CakePHPではテーブル命名規則で複数系じゃないといけなかったと思うので、そこだけに注意して適当にstudentesを作成する。データもとりあえずinsertしておく。
mysql> CREATE TABLE `students` (
  `id` int(11) unsigned NOT NULL auto_increment,
  `name` varchar(8) NOT NULL default '',
  `class` tinyint(3) unsigned NOT NULL default '0',
  `score` tinyint(3) unsigned NOT NULL default '0',
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
mysql> INSERT INTO`students` (`name`, `class`, `score`) VALUES ('ハルヒ', 5, 90), ('有希', 6, 100), ('キョン', 5, 60);   
で、もう一度Model作成をする。今度はStudentが選べるようになってるので選択して進める。Modelの設定で聞かれるのは、validationとassociation。テーブル一つなのでassociationはなしで、validationはまた適当に設定すると下記のようなModel作られる。実ファイルはmyapp/models/student.phpに作成される。

---------------------------------------------------------------
The following Model will be created:
---------------------------------------------------------------
Name:       Student
DB Table:   `students`
Validation: Array
(
    [id] => Array
        (
            [numeric] => numeric
            [notempty] => notempty
        )

    [name] => Array
        (
            [notempty] => notempty
        )

    [class] => Array
        (
            [numeric] => numeric
            [notempty] => notempty
        )

    [score] => Array
        (
            [numeric] => numeric
            [notempty] => notempty
        )

)
次にController。色々聞かれる。ほとんどdefaultのまま。変えたのは、下記のsome methodsを作るかってやつだけ。コントローラもできあがった。

Would you like to create some basic class methods 
(index(), add(), view(), edit())? (y/n) 
[n] > y

---------------------------------------------------------------
The following controller will be created:
---------------------------------------------------------------
Controller Name:
 Students
最後にView。これも特に難しいことはなく完了したので、ブラウザからmyapp/studentsを見てみる。
先ほど入れたデータのリストが見れる。New Studentから追加もできる。
validationはここで評価されるようだ。validationをnumericとしたものに数字以外を入れるとnumericと表示され登録はできない。idは入力できないのでvalidationは必要なかったかな。

bakeを使うとテーブルを管理(閲覧、追加、削除、更新)するページが簡単にできるのがわかった。今度テーブルを複数にしてrelationがあるのも確認しよう。