按ID删除在yii中不起作用

时间:2017-01-20 06:30:49

标签: php yii yii1.x

我的控制器中有以下代码可以删除文件:

 public function actionDelete($id)
   {
       $current_user_id=Yii::app()->user->id;
       $condition = 'user_id=:user_id';
       $params = array(':user_id' => $current_user_id);
       $idExists = UserGroup::model()->exists($condition,$params);
       if($idExists){
           $list = UserGroup::model()->find($current_user_id);
           $getgroup= $list->user_group_id;
           $getgroupright=UserRights::model()->find($getgroup);
           $getuserRule=$getgroupright->user_rule_id;
           $getuserprivilege=$getgroupright->user_privilege_id;
           if($getuserprivilege=='1' and $getuserRule=='3'){
                $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'));

           }
             }

        }

代码if($getuserprivilege=='1' and $getuserRule=='3'){适用于按ID(100%)查看文件。但是,它没有说删除文件。如果我删除此代码,它将开始工作。我该如何解决这个错误?

2 个答案:

答案 0 :(得分:0)

首先在控制器顶部添加以下代码,然后检查请求是POST还是GET

if(Yii::app()->request->isPostRequest()) 
   echo "POST"; 
else 
   echo "NOT POST";

如果输出是“NOT POST”,那么

检查控制器中的过滤器(),看看是否只允许通过POST请求删除。

public function filters() {
        return array(
            'accessControl', // perform access control for CRUD operations
            'postOnly + delete', // we only allow deletion via POST request
        );
}

'postOnly + delete', - >评论这一行。

允许通过GET请求删除。

  

替代(更安全和更好)的解决方案是您使用POST   将'id'传递给控制器​​的方法。

答案 1 :(得分:-1)

尝试替换

$this->loadModel($id)->delete();

$this->findModel($id)->delete();

当然,你需要在控制器中使用findModel($ id)方法