作成(Create)、読み出し(Read)、更新(Update)、削除(Delete) といういわゆる CRUD は、アプリケーションでのデータオブジェクトに対する4つの基本操作です。 ウェブアプリケーション開発において CRUD 操作を実装するタスクが必要になるのは、きわめて普通のことです。 そのため、この CRUD 操作を実装するプロセス (スキャフォールディング(足場組み) とも呼ばれます) を自動化するために、Yii は Gii という名前のもとに、いくつかのコード生成ツールを提供しています。
注意: Gii は、バージョン 1.1.2 から利用可能です。それまでは、この目的には yiicシェルツール を使用する必要がありました。
以降では、ブログアプリケーションの記事とコメントの CRUD 操作をこのツールによって実装する方法を紹介します。
最初に 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 を実運用マシンで走らせる場合は、上記コードは削除すべきです。コード生成ツールは開発マシンでのみ使用すべきです。
最初に、それぞれのデータベーステーブルに対して モデル クラスを作成する必要があります。このチュートリアルを読み進むと分るように、モデルクラスによって直観的なオブジェクト指向のやり方でデータベースにアクセスすることが出来るようになります。
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.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
データベーステーブルにアクセスするのに使われます。モデルクラスが生成された後は、これらのモデルについて CRUD 操作を実装するコードを生成する Crud Generator
が使用可能です。
Post
と Comment
のモデルについてこれを行います。
Crud Generator
のページにおいて、Model Class
フィールドに Post
(たった今作成した記事のモデルクラス名)を入力し、Preview
ボタンを押します。すると、たくさんのファイルが生成されることになるのが分ります。Generate
ボタンを押して、それらを生成して下さい。
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.php
と views/post/update.php
に埋め込まれます。これは記事情報を入力する HTML フォームを表示します。views/post/_view.php
は部分ビューファイルであり views/post/index.php
で使用されます。これは単一の記事の簡単なビューを表示します。views/post/_search.php
は部分ビューファイルであり views/post/admin.php
で使用されます。検索フォームを表示します。以下のURLにアクセスすることにより、たった今生成したコードを試験することができます。
http://www.example.com/blog/index.php?r=post http://www.example.com/blog/index.php?r=comment
自動生成されたコードによる記事とコメントの機能は、お互いに完全に独立していることに注意してください。また、新しい記事やコメントを作成する際に、author_id
や create_time
といった情報を入力するように要求されます。これらの情報は実際のアプリケーションではプログラムによって設定されるべきものです。しかし心配することはありません。次のマイルストーンでこれらの問題を解決します。今のところは、このプロトタイプがブログアプリケーションに必要なほぼすべての機能をそなえていることに、それなりに満足すべきでしょう。
上記ファイルがどう使われるかをよりよく理解するために、ブログアプリケーションで記事の一覧が表示される場合のワークフローを示します。
http://www.example.com/blog/index.php?r=post
をリクエストします。PostController
のインスタンスを作成し、実行します。PostController
インスタンスは要求された index
アクションを、actionIndex()
メソッドを呼ぶことで実行します。ユーザがアクションを明示的に URL 中で示さなかった場合、index
がデフォルトのアクションとなることに注意して下さい。actionIndex()
メソッドはデータベースに問い合わせを行い、最近の記事リストを取り出します。actionIndex()
メソッドは、記事データを index
ビューで描画します。
Found a typo or you think this page needs improvement?
Edit it on github !
Signup or Login in order to comment.