スキャフォールディング

作成、読み出し、更新、そして削除 (CRUD) はアプリケーションにおけるデータオブジェクトに対する4つの基本操作です。 ウェブアプリケーション開発において、CRUDオペレーションを実装するタスクは共通であるため、YiiはGiiという名前でコード生成ツールを提供し、それはこのプロセス(スキャフォールディングとしても知られる)を自動化できます。

注: Giiは1.1.2版から利用可能です。それまではこの目的にはyiicシェルツールを使用する必要があります。

以降では、ブログアプリケーションの記事やコメントのCRUDオペレーションをこのツールにより実装する方法を紹介します。

1. Giiのインストール

最初にGiiをインストールする必要があります。ファイル/wwwroot/blog/protected/config/main.phpを開き、以下のコードを追加してください。

return array(
        ......
        'import'=>array(
                'application.models.*',
                'application.components.*',
        ),
 
        'modules'=>array(
                'gii'=>array(
                        'class'=>'system.gii.GiiModule',
                        'password'=>'pick up a password here',
                ),
        ),
);

上記のコードはgiiという名のモジュールをインストールし、それは以下のURLをブラウザに入力することでアクセスすることができます。

http://www.example.com/blog/index.php?r=gii

パスワード入力が指示されます。/wwwroot/blog/protected/config/main.phpであらかじめ指定したパスワードを入力することにより、全ての利用可能なコード生成ツールがリストされたページが表示されます。

注: 上記コードは製品機械においては取り除くべきです。コード生成ツールは開発機械でのみ使われるべきです。

2. モデルの作成

最初にそれぞれのデータベーステーブルのモデルクラスを作成する必要があります。このチュートリアルの後半に表れるように、モデルクラスによって直観的なオブジェクト指向のやり方でデータベースにアクセスすることができます。

モデル生成ツールを使用するためには、モデルジェネレータリンクをクリックしてください。

モデルジェネレータページでは、Table Nameフィールドにtbl_user (ユーザテーブル名)、Table Prefixフィールドにtbl_と入力し、プレビューボタンを押します。 プレビューテーブルが表れます。テーブルのリンクをクリックすることで、生成されるコードをプレビューすることができます。 もし、全てがOKであれば、生成ボタンを押すことによりコードを生成し、ファイルに保存することができます。

情報: コードジェネレータは生成されたコードをファイルに保存する必要があるので、ウェブプロセスから対応するファイルを生成し、更新するためのパーミッションが必要になります。 簡単のため、/wwwroot/blogディレクトリ全体をウェブプロセスから書込み可能とすることがあります。これはGiiを使用するときの開発マシンのみ必要であることに注意してください。

残りのデータベーステーブル、つまりtbl_posttbl_commenttbl_tagtbl_lookupについて同じステップを繰り返します。

ヒント: アスタリスクキャラクタ'*'をTable Nameフィールドに入力することが可能です。これにより一発で、全てのデータベーステーブルのモデルクラスが生成されます。

この段階において、新しく生成されたファイルは以下のとおりです。

  • models/User.phpファイルはCActiveRecordを継承するUserクラスを含みます。このクラスはtbl_userデータベーステーブルにアクセスするのに使われます。
  • models/Post.phpファイルはCActiveRecordを継承するPostクラスを含みます。このクラスはtbl_postデータベーステーブルにアクセスするのに使われます。
  • models/Tag.phpファイルはCActiveRecordを継承するTagクラスを含みます。このクラスはtbl_tagデータベーステーブルにアクセスするのに使われます。
  • models/Comment.phpファイルはCActiveRecordを継承するCommentクラスを含みます。このクラスはtbl_commentデータベーステーブルにアクセスするのに使われます。
  • models/Lookup.phpファイルはCActiveRecordを継承するLookupクラスを含みます。このクラスはtbl_lookupデータベーステーブルにアクセスするのに使われます。

3. CRUDオペレーションの実装

モデルクラスが生成された後は、これらのモデルについてCRUDオペレーションを実装するコードを生成するCrudジェネレータが使用可能です。 PostCommentモデルについてこれを行います。

Crudジェネレータのページにおいて、Post(たった今作成した記事のモデルクラス名)をModel Classフィールドに入力しPreviewボタンを押します。たくさんのファイルが生成されるのが見られます。それらを生成するために生成ボタンを押します。

Commentモデルについても同じステップを繰り返します。

CRUDジェネレータによって生成されたファイルを見てみましょう。全てのファイルは/wwwroot/blog/protected以下に生成されます。 便宜上それらのファイルをコントローラファイルとビューファイルに分類します。

  • コントローラファイル:

    • controllers/PostController.phpファイルはPostControllerクラスを含みます。このコントローラは記事のCRUD操作を受け持ちます。
    • controllers/CommentController.phpファイルはCommentControllerクラスを含みます。このコントローラはコメントのCRUD 操作を受け持ちます。
  • ビューファイル:

    • views/post/create.phpファイルは新しい記事を作るHTMLフォームのビューファイルです。
    • views/post/update.phpファイルは記事の更新を行うHTMLフォームのビューファイルです。
    • views/post/view.phpファイルは記事の詳細情報を表示するビューファイルです。
    • views/post/index.phpファイルは記事のリストを表示するビューファイルです。
    • views/post/admin.phpファイルは管理コマンドと一緒に表形式で記事を表示するビューファイルです。
    • views/post/_form.phpファイルは部分ビューファイルでありviews/post/create.phpviews/post/update.phpに埋め込まれます。これは記事情報を集めるHTMLフォームを表示します。
    • views/post/_view.phpファイルは部分ビューファイルでありviews/post/index.phpで使用されます。これは単一の記事の簡単なビューを表示します。
    • views/post/_search.phpファイルは部分ビューファイルでありviews/post/admin.phpで使用されます。検索フォームを表示します。
    • 同様のビューファイル一式がコメント用にも生成されます。

4. 試験

以下のURLにアクセスすることにより、たった今生成したコードを試験することができます。

http://www.example.com/blog/index.php?r=post
http://www.example.com/blog/index.php?r=comment

自動生成されたコードによる記事とコメントの機能は、それぞれ完全に独立していることに注意してください。また、新しい記事やコメントを作る際に、authIdcreateTimeといった情報を入力する必要があります。これらの情報は実際のアプリケーションではプログラムによって設定するべきです。しかし心配することはありません。次のマイルストーンでこれらの問題を解決します。今のところは、このプロトタイプがブログアプリケーションに必要なほぼすべての機能をそなえていることに、それなりに満足すべきでしょう。

上記ファイルがどう使われるかをよりよく理解するために、ブログアプリケーションで記事の一覧が表示される場合のワークフローを示します。

  1. ユーザがURL http://www.example.com/blog/index.php?r=postを要求します。
  2. ウェブサーバにより エントリスクリプト が実行され、アプリケーションインスタンスが作成・初期化された後、リクエストを処理します。
  3. アプリケーションは PostController のインスタンスを作成し、実行します。
  4. PostController インスタンスは要求された index アクションを、actionIndex() メソッドを呼ぶことで実行します。もしユーザがアクションを明示的にURL中で示さなければ、indexがデフォールトのアクションとなります。
  5. actionIndex() メソッドはデータベースに問い合わせを行い、最近の記事リストを取り出します。
  6. actionIndex() メソッドは、記事データを index ビューで描画します。
$Id: prototype.scaffold.txt 3332 2011-06-28 20:07:38Z alexander.makarow $

Be the first person to leave a comment

Please to leave your comment.