0 フォロワー

コメントの管理

コメント管理には、コメントの更新、削除、承認が含まれます。これらの操作は、CommentControllerクラスのアクションとして実装されます。

1. コメントの更新と削除

コメントの更新と削除のためにGiiによって生成されたコードは、ほぼ変更されていません。

2. コメントの承認

コメントが新しく作成されると、承認待ちの状態になり、ゲストユーザーに表示されるためには承認が必要です。コメントの承認は主にコメントのステータスカラムを変更することです。

CommentControlleractionApprove() メソッドを次のように作成します。

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'));
}

ここでは、Commentクラスのステータス定数で定義されているように、コメントのステータスプロパティをapprovedに設定しています

class Comment extends CActiveRecord
{
    ...
 
    const STATUS_PENDING=1;
    const STATUS_APPROVED=2;
 
    ..
}

その後、update()メソッドを呼び出して、この新しく設定されたプロパティをデータベースに保存します。

また、すべてのコメントを表示するためにCommentControlleractionIndex()メソッドを変更します。承認待ちのコメントが最初に表示されるようにします。

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_posttbl_commentの両方にstatuscreate_timeカラムがあるため、対応するカラム参照をテーブルエイリアス名を付加して明確にする必要があることに注意してください。ガイドに記載されているように、リレーショナルクエリのプライマリテーブルのエイリアスは常にtです。したがって、上記のコードでは、プライマリテーブルであるtbl_commentから取得する値を指定するために、tstatuscreate_timeカラムに付加しています。

投稿インデックスビューと同様に、CommentControllerindexビューは、コメントリストを表示するためにCListViewを使用し、さらに個々のコメントの詳細を表示するためにパーシャルビュー/wwwroot/blog/protected/views/comment/_view.phpを使用します。詳細についてはここでは説明しません。興味のある読者は、ブログデモの対応するファイル/wwwroot/yii/demos/blog/protected/views/comment/_view.phpを参照してください。

誤字を発見しましたか?または、このページを改善する必要があると思いますか?
githubで編集 !