0

所以这是我面临的问题:我在 Yii 中创建了一个博客系统,并在帖子视图页面中创建了一个评论创建表单。我还创建了一个删除链接,该链接工作正常,当我单击删除链接时,评论确实被删除了,但是当评论被删除时,我被重定向到评论页面的管理员 Gridview。

这是 Comment Controller 中的默认删除操作:

public function actionDelete($id)
    {
        $this->loadModel($id)->delete();

        // if AJAX request (triggered by deletion via admin grid view), we should not redirect the browser

        if(!isset($_GET['ajax']))
            $this->redirect(isset($_POST['returnUrl']) ? $_POST['returnUrl'] : array('admin'));
    }

但是,我也尝试过使用returnUrl但是,我仍然无法重定向回我所在的同一帖子查看页面。我不断被重定向到评论管理的管理页面。

这是我在视图文件中的 CHtml::link:

<?php echo CHtml::link('Delete','#',array('submit'=>array('comment/delete','id'=>$comment->id),'confirm'=>'Are you sure?')); ?>

这会很好地删除所需的评论,但我希望在删除后将其重定向到此页面本身。

如果需要更多代码,我会给出。

PS:如果有帮助,这里是 CommentController 的 accessRules:

public function accessRules()
    {
        return array(
            array('allow',  // allow all users to perform 'index' and 'view' actions
                'actions'=>array('index','view','create'),
                'users'=>array('*'),
            ),

            array('allow', // allow admin user to perform 'admin' and 'delete' actions
                'actions'=>array('admin','delete','update'),
                'users'=>array('@'),
            ),
            array('deny',  // deny all users
                'users'=>array('*'),
            ),
        );
    }

如果我做错了什么,我很抱歉。我对 Yii 确实很陌生,并且尽我所能去学习它。

问候,

4

2 回答 2

3
echo CHtml::link('Delete','#',array('submit'=>array('comment/delete','id'=>$comment->id),'confirm'=>'Are you sure?')); ?

此行意味着您创建了一个 HTML 链接,单击该链接时,它将以发布模式提交给“评论/删除”操作。

Yii 站点上提供了有关这些选项的文档: http ://www.yiiframework.com/doc/api/1.1/CHtml#clientChange-detail

显然,这里没有在 $_POST 中设置“returnUrl”参数,只设置了“id”。这就是为什么您总是被重定向到管理视图。

我不知道您如何使用urlReturn否则,但对于重定向,我想这个想法是这样的:

    public function actionDelete($id) {
    $this->loadModel($id)->delete();

    // if AJAX request (triggered by deletion via admin grid view), we should not redirect the browser
    if (!isset($_GET['ajax'])) {
        $this->redirect(Yii::app()->getRequest()->urlReferrer);
    }
}
于 2013-05-16T20:56:06.003 回答
0

您可以只使用 HTTP 引荐来源网址

public function actionDelete($id)
{
    $this->loadModel($id)->delete();

    // if AJAX request (triggered by deletion via admin grid view), we should not redirect the browser

    if(!isset($_GET['ajax']))
        $this->redirect(isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : array('admin'));
}

或从您正在加载的模型中获取帖子的 URL,然后重定向到那里。我不知道您的确切实现细节,但它有点像这样(假设您有一条路线blogPost/view并且comment模型blogPost与评论所针对的博客文章有关系:

public function actionDelete($id)
{
    $model = $this->loadModel($id);
    $model->delete();

    // if AJAX request (triggered by deletion via admin grid view), we should not redirect the browser

    if(!isset($_GET['ajax']))
        $this->redirect(isset($_POST['returnUrl']) ? $_POST['returnUrl'] : array('blog/view', 'id' => $model->blogPost->id));
}
于 2013-05-16T20:47:57.860 回答