Create、Read、Update、Delete(CRUD)は、アプリケーションにおけるデータオブジェクトの4つの基本操作です。Webアプリケーション開発においてCRUD操作の実装は非常に一般的であるため、YiiはGiiという名前でコード生成ツールを提供しており、このプロセス(Scaffoldingとも呼ばれます)を自動化することができます。
注記: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
で設定したパスワードを入力すると、利用可能なすべてのコード生成ツールのリストが表示されます。
注記:本番環境で実行する場合は、上記のコードを削除する必要があります。コード生成ツールは開発環境でのみ使用する必要があります。
最初に、各データベーステーブルに対してモデルクラスを作成する必要があります。モデルクラスを使用すると、このチュートリアルの後半で説明するように、直感的なオブジェクト指向の方法でデータベースにアクセスできます。
モデル生成ツールを使用するには、Model Generator
リンクをクリックします。
Model Generator
ページで、Table Name
フィールドにtbl_user
(ユーザーテーブル名)、Table Prefix
フィールドにtbl_
を入力し、「プレビュー」ボタンを押します。プレビューテーブルが表示されます。テーブル内のリンクをクリックして、生成されるコードをプレビューできます。問題なければ、「生成」ボタンを押してコードを生成し、ファイルに保存します。
情報:コードジェネレータは生成されたコードをファイルに保存する必要があるため、Webプロセスに該当するファイルの作成と変更の権限が必要です。簡略化のために、Webプロセスに
/wwwroot/blog
ディレクトリ全体の書き込み権限を与えることができます。これは、Gii
を使用する際の開発環境でのみ必要であることに注意してください。
tbl_post
、tbl_comment
、tbl_tag
、tbl_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
クラスが含まれています。モデルクラスを作成したら、Crud Generator
を使用して、これらのモデルのCRUD操作を実装するコードを生成できます。これはPost
とComment
モデルに対して行います。
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.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
インスタンスは、そのactionIndex()
メソッドを呼び出すことによってindex
アクションを実行します。ユーザーがURLで実行するアクションを指定しない場合、index
はデフォルトのアクションであることに注意してください。actionIndex()
メソッドはデータベースをクエリして、最新の投稿のリストを取得します。actionIndex()
メソッドは、投稿データを使用してindex
ビューをレンダリングします。タイプミスを見つけたり、このページの改善が必要だと考えますか?
githubで編集する !
投稿とコメントをCRUDできない人のために
"crud Post"と"crud Comment"を実行したときに、Scaffoldingの部分で詰まりました。
モデルフォルダに"tblPost"と"tlbComment"があり、"Post"と"Comment"がないことに気づきました。前の章で説明されているように、config/main.phpファイルのcomponents db配列セクションに'tablePrefix'=>'tbl_'を追加することを忘れていました。
https://yii.dokyumento.jp/doc/blog/prototype.database
'tablePrefix'=>'tbl_'行がある場合、"model *"コマンドでモデルを生成するときに、テーブル名から"tbl_"プレフィックスが削除されます。
config/main.phpファイルにtablePrefix行を追加することを忘れた別の人に対するQiangの返信でもこの点を説明しています。
https://yii.dokyumento.jp/forum/index.php?/topic/7545-help-yii-configuration-on-mac/page__view__findpost__p__38330
ブログチュートリアルのこの章に、この点に関する注意書きを追加することをお勧めします。main.php ファイルの編集を忘れた場合、他の人もこの問題に遭遇する可能性があるためです。
yii-1.0.6.r1102 での webapp に関する問題
シェルを実行してモデルを作成しようとしています。
cmd でエラーが発生します。
致命的エラー: クラス Yii を path-to-app\lib\yii-1.0.6.r1102\framework\yii.php の 29 行目で再宣言できません
どこが間違っているのでしょうか?
YII がフォームでフラグを立てる必須フィールドをどのように決定するか
投稿やコメントのウェブフォームにある小さな「必須」アスタリスク(*)がどのように表示されるかについて疑問に思っている場合、それはブログデータベースの作成に使用した SQL ファイルのデータ構造によって決定されます。MySQL の場合、NOT NULL キーワードで定義されているデータベースのフィールドは、フォームの必須フィールドになります。
コメントするには、サインアップ または ログインしてください。