无法在Yii中正确地使用actionDelete()进行重定向:

时间:2013-05-16 20:14:48

标签: php yii authorization http-redirect

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

这是评论控制器中的默认删除操作:

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 ::链接:

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

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

如果需要更多代码,我将给予它。

P.S:如果它有帮助,这是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很新,并且尽我所能尽力学习。

此致

2 个答案:

答案 0 :(得分: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

显然,这里没有'returnUrl'参数设置到$ _POST中,只设置'id'。这就是您总是被重定向到 admin 视图的原因。

我不知道您是如何使用 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);
    }
}

答案 1 :(得分: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/viewcomment模型与博客的关系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));
}