コメントの管理
コメントの管理には、コメントの更新・削除・承認があります。これらの操作は CommentController
クラスのアクションとして実装します。
コメントの更新と削除
Gii
で生成したコードの、コメント更新・削除の部分はほとんど変更せずに使います。
コメントの承認
コメントが新しく作成されたとき、コメントは承認待ちの状態になります。ゲストユーザに見えるようにするためには承認が必要です。コメントの承認は、基本的にコメントの status
カラムを変更するだけです。
CommentController
に以下のような actionApprove()
メソッドを作成します。
public function actionApprove() { if(Yii::app()->request->isPostRequest) { $comment=$this->loadModel(); $comment->approve(); $this->redirect(array('index')); } else throw new CHttpException(400,'Invalid request...'); }
上記コードでは、POST リクエスト経由で approve
アクションが呼ばれたときに、Comment
モデルで定義した approve()
メソッドを呼んでステータスを変更します。それから、このコメントが属する記事を表示するページに、ブラウザをリダイレクトします。
もちろん、上記に加えて、Comment
モデルに approve()
メソッドを作成する必要もあります。以下のようにします。
public function approve() { $this->status=Comment::STATUS_APPROVED; $this->update(array('status')); }
していることは単純なことです。まず、コメントの status
プロパティに Comment
クラスで定義されている 承認済み
状態を示す定数をセットします。
class Comment extends CActiveRecord { ... const STATUS_PENDING=1; const STATUS_APPROVED=2; .. }
そして、次に、update()
メソッドを呼んで新しくセットされたプロパティをデータベースに保存します。
さらに、すべてのコメントを表示するために CommentController
の actionIndex()
メソッドを修正します。承認待ちのコメントを先頭に表示するようにします。
public function actionIndex() { $dataProvider=new CActiveDataProvider('Comment', array( 'criteria'=>array( 'with'=>'post', 'order'=>'t.status, t.create_time DESC', ), )); $this->render('index',array( 'dataProvider'=>$dataProvider, )); }
上記コードでは、tbl_post
と tbl_comment
の両方に status
と create_time
というカラムがあるので、曖昧さを無くすためにテーブルのエイリアス名を接頭辞として付ける必要があります。ガイド に記述されているように、リレーショナルなクエリーでは、プライマリテーブルのエイリアスは常に t
です。そのため上記コードでは、status
カラムと create_time
カラムに接頭辞 t
を付けて、それらの値をプライマリテーブル (tbl_comment
) から取得すべきことを示しています。
記事の index ビューのように、CommentController
の index
ビューでも CListView を使ってコメント一覧を表示します。部分的ビューとして /wwwroot/blog/protected/views/comment/_view.php
を使って、個々のコメントの詳細を表示します。ここでは詳細には立ち入りません。興味のある方はブログデモの対応するファイル /wwwroot/yii/demos/blog/protected/views/comment/_view.php
を参照してください。