0 フォロワー

Scaffolding

Create、Read、Update、Delete(CRUD)は、アプリケーションにおけるデータオブジェクトの4つの基本操作です。Webアプリケーション開発においてCRUD操作の実装は非常に一般的であるため、YiiはGiiという名前でコード生成ツールを提供しており、このプロセス(Scaffoldingとも呼ばれます)を自動化することができます。

注記: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で設定したパスワードを入力すると、利用可能なすべてのコード生成ツールのリストが表示されます。

注記:本番環境で実行する場合は、上記のコードを削除する必要があります。コード生成ツールは開発環境でのみ使用する必要があります。

2. モデルの作成

最初に、各データベーステーブルに対してモデルクラスを作成する必要があります。モデルクラスを使用すると、このチュートリアルの後半で説明するように、直感的なオブジェクト指向の方法でデータベースにアクセスできます。

モデル生成ツールを使用するには、Model Generatorリンクをクリックします。

Model Generatorページで、Table Nameフィールドにtbl_user(ユーザーテーブル名)、Table Prefixフィールドにtbl_を入力し、「プレビュー」ボタンを押します。プレビューテーブルが表示されます。テーブル内のリンクをクリックして、生成されるコードをプレビューできます。問題なければ、「生成」ボタンを押してコードを生成し、ファイルに保存します。

情報:コードジェネレータは生成されたコードをファイルに保存する必要があるため、Webプロセスに該当するファイルの作成と変更の権限が必要です。簡略化のために、Webプロセスに/wwwroot/blogディレクトリ全体の書き込み権限を与えることができます。これは、Giiを使用する際の開発環境でのみ必要であることに注意してください。

tbl_posttbl_commenttbl_tagtbl_lookupを含む、残りのデータベーステーブルについても同様の手順を繰り返します。

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

この段階で、次の新規作成ファイルが作成されます。

  • models/User.phpには、CActiveRecordを拡張し、tbl_userデータベーステーブルにアクセスするために使用できるUserクラスが含まれています。
  • models/Post.phpには、CActiveRecordを拡張し、tbl_postデータベーステーブルにアクセスするために使用できるPostクラスが含まれています。
  • models/Tag.phpには、CActiveRecordを拡張し、tbl_tagデータベーステーブルにアクセスするために使用できるTagクラスが含まれています。
  • models/Comment.phpには、CActiveRecordを拡張し、tbl_commentデータベーステーブルにアクセスするために使用できるCommentクラスが含まれています。
  • models/Lookup.phpには、CActiveRecordを拡張し、tbl_lookupデータベーステーブルにアクセスするために使用できるLookupクラスが含まれています。

3. CRUD操作の実装

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

Crud Generatorページで、Model ClassフィールドにPost(作成したばかりの投稿モデルクラスの名前)を入力し、「プレビュー」ボタンを押します。さらに多くのファイルが生成されることがわかります。「生成」ボタンを押して生成します。

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

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

  • コントローラファイル

    • controllers/PostController.phpには、投稿に関するすべてのCRUD操作を担当するコントローラであるPostControllerクラスが含まれています。
    • controllers/CommentController.phpには、コメントに関するすべてのCRUD操作を担当するコントローラであるCommentControllerクラスが含まれています。
  • ビューファイル

    • 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. ユーザーはURLhttp://www.example.com/blog/index.php?r=postを要求します。
  2. Webサーバーによってエントリスクリプトが実行され、リクエストを処理するためのアプリケーションインスタンスが作成および初期化されます。
  3. アプリケーションはPostControllerのインスタンスを作成して実行します。
  4. PostControllerインスタンスは、そのactionIndex()メソッドを呼び出すことによってindexアクションを実行します。ユーザーがURLで実行するアクションを指定しない場合、indexはデフォルトのアクションであることに注意してください。
  5. actionIndex()メソッドはデータベースをクエリして、最新の投稿のリストを取得します。
  6. actionIndex()メソッドは、投稿データを使用してindexビューをレンダリングします。

タイプミスを見つけたり、このページの改善が必要だと考えますか?
githubで編集する !