« DBDesigner4を使ってみる | メイン | bake.phpでコントローラとビューを作る »

Scaffoldとdbdesigner2cake.php

DBDesigner 4 と連携してER図から半自動でアプリ生成のエントリを見てDBDesigner4を知り,前のエントリで作成したER図からコードを生成してみます。

Scaffoldって

Scaffoldとは何か調べようとYahoo!辞書を見たら「処刑台」とあってびっくり。しかし「(一時的な)組立て舞台」という意味もあるとか。そうこの意味でしょうね当然。Scaffoldを使うと簡単に入力画面を作ってしまえるようです。用途としては開発初期段階でのデータエントリやデータの確認に使えますよという感じでしょうか。コントローラに$scaffoldという変数を用意するだけです。実際にやってみます。利用するテーブルは次の図のものです。

この中のgroupsテーブルを操作する画面を作ってみます。まずモデルの作成

<?php
class Group extends AppModel {
    var $name = 'Group';
}
?> 

名前だけを定義した最も手抜きモデルです。モデル名はテーブル名の単数形です。

<?php
class GroupsController extends AppController {
    var $name = 'Groups';
    var $scaffold;
}
?>

コントローラは複数形+Controllerという名前にします。
何も書いていないに等しいようなコードですがこれでどうでしょうか。ブラウザからhttp://localhost/webapp/groupsを表示するとgroupsテーブルの一覧が表示され,レコードの訂正や追加もできます。非常に簡単です。employeesテーブルに関しても同様にやってみました。ちゃんと表示されます。

employeesテーブルの追加画面の一部です。Group Idのフィールドは普通のテキストボックスになっています。これ覚えておいてください。

dbdesigner2cake.phpを使う

dbdesigner2cake.phpは,DBDesigner4で作ったxmlファイルを渡すと,各テーブルのモデルとScaffoldを利用したコントローラを自動で作ってくれるツールです。Scaffoldを使ったコントローラといっても前述の通り非常に簡単ですから,わざわざこういうツールを使うまでもないようにも思えますが,テーブルの数が多くなったらそれなりに便利だろうと思うのでやってみました。

事前に,これまで作ったモデルとコントローラのPHPファイルを削除しておきます。

dbdesigner2cake.phpを開発環境のCakePHPのルートフォルダ(このブログの記事の場合にはwebappフォルダです)に置きます。そこに,DBDesginer4で保存したデータベースモデルを保存したxmlファイルも同じ場所にコピーしておきます。そしてコマンドプロンプトから次のように実行します。 

C:\xampp\htdocs\webapp>php.exe dbdesigner2cake.php time_card.xml
Scaffolding Employee -- done
Scaffolding Group -- done
Scaffolding TimeCard -- done
Scaffolding EventKind -- done
Done

なんだか終わったようです。作成されたコントローラとモデルを見てみます。コントローラの方はもう全くなんてことはありません。$nameと$scaffoldを定義しているだけです。モデルの方はDBDesigner4て定義したリレーションシップが反映されたソースになっています。 

<?php
class Employee extends AppModel {
    var $name = 'Employee';
    var $transactional = 1;
var $hasMany = Array(
        'TimeCard' =>
            array('className' => 'TimeCard',
                    'foreignKey' => 'employee_id',
                    'conditions' => '',
                    'fields' => '',
                    'order' => '',
                    'counterCache' => ''
            ),
    );
    var $belongsTo = Array(
        'Group' =>
            array('className' => 'Group',
                    'foreignKey' => 'group_id',
                    'conditions' => '',
                    'fields' => '',
                    'order' => '',
                    'counterCache' => ''
            ),
    );
 
}
?>

employee.phpのソースです。これを作ってくれるというのは非常に便利じゃないでしょうか。これからモデル作りはこれだな。
dbdesigner2cake.phpで作った状態で,先ほどのようにemployeesの新規追加画面を見てみますと,

 

図のようにGroup IdとあったところがGroupという名前になってプルダウンコンボになっています。おおこれは!外部キーとして定義されていたら自動でこうなるのか。しかし一覧を見るとID自体がリストされています。本当はgroup_nameがリストされて欲しいところ。これはどうやらnameというフィールドがあればそれをリストするようです。他の名前のフィールドをリストさせたい場合はモデルに次のような記述を追加します。 

var $displayField = 'group_name';

これで再表示してみると見事にリストされました。employeesも外部参照されていますがnameフィールドがあるのでそのままでOK。event_kindモデルにも次のように定義します。 

var $displayField = 'event_kind';

命名規則を守ろう

ここまでCakePHPをさわってみて感じた感想です。命名規則を守ろう。意地を張らずにこの言葉を聞いておけば楽ができます。さきほどの$displayFieldの設定など必要ないように各テーブルに[name]というフィールドを作っておいた方がいいように思います。

« DBDesigner4を使ってみる | メイン | bake.phpでコントローラとビューを作る »

関連するエントリー

トラックバック

このエントリーのトラックバックURL:
http://mt.sunvisor.net/mt-tb.cgi/45

コメントを投稿

About

2007年11月02日 12:51に投稿されたエントリーのページです。

ひとつ前の投稿は「DBDesigner4を使ってみる」です。

次の投稿は「bake.phpでコントローラとビューを作る」です。

他にも多くのエントリーがあります。メインページアーカイブページも見てください。

CakePHP初の公認ガイドブック。高速開発を「PHPらしく」実現するフレームワークを導入から実践、拡張まで徹底解説。

2008年09月

  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30        

最近のコメント

最近のトラックバック

Powered by
Movable Type 3.35