0 关注者

管理评论

评论管理包括更新、删除和批准评论。这些操作在 CommentController 类中实现为操作。

1. 更新和删除评论

Gii 生成的用于更新和删除评论的代码基本保持不变。

2. 批准评论

当评论新创建时,它们处于待批准状态,需要批准才能对访客用户可见。批准评论主要是更改评论的状态列。

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

这里我们只是将评论的状态属性设置为 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。因此,我们在上面的代码中将 t 作为前缀添加到 statuscreate_time 列,以表示我们希望从主表 tbl_comment 中获取这些值。

与帖子索引视图类似,CommentControllerindex 视图使用 CListView 来显示评论列表,该列表又使用部分视图 /wwwroot/blog/protected/views/comment/_view.php 来显示每个单独评论的详细信息。我们这里不详细介绍。感兴趣的读者可以参考博客演示 /wwwroot/yii/demos/blog/protected/views/comment/_view.php 中相应的 文件。

发现错别字或您认为此页面需要改进?
在 github 上编辑它 !