スキャフォールディング(足場組み)

作成(Create)、読み出し(Read)、更新(Update)、削除(Delete) といういわゆる CRUD は、アプリケーションでのデータオブジェクトに対する4つの基本操作です。 ウェブアプリケーション開発において CRUD 操作を実装するタスクが必要になるのは、きわめて普通のことです。 そのため、この 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 をブラウザに入力して Gii モジュールにアクセスすることが出来るようになります。

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

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

注意: Yii を実運用マシンで走らせる場合は、上記コードは削除すべきです。コード生成ツールは開発マシンでのみ使用すべきです。

2. モデルの作成

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

Model Generator リンクをクリックして、モデル生成ツールの使用を開始してください。

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

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

残りのデータベーステーブル (tbl_post, tbl_comment, tbl_tag, tbl_lookup) について、同じ手順を繰り返します。

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

この段階において、以下のファイルが新しく生成されています。

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

3. CRUD 操作の実装

モデルクラスが生成された後は、これらのモデルについて CRUD 操作を実装するコードを生成する Crud Generator が使用可能です。 PostComment のモデルについてこれを行います。

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

Comment モデルについても同じ手順を繰り返します。

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

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

    • controllers/PostController.phpPostControllerクラスを含みます。このコントローラは記事の CRUD 操作を受け持ちます。
    • controllers/CommentController.phpCommentController クラスを含みます。このコントローラはコメントの 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

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

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

  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$

Be the first person to leave a comment

Please to leave your comment.