0

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

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

           }
             }

        }

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

4

2 回答 2

0

首先在您的控制器中添加以下代码并检查请求是 POST 还是 GET

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

如果输出是“NOT POST”那么

检查控制器中的 filters() 并查看是否仅通过 POST 请求允许删除。

公共功能过滤器(){
        返回数组(
            'accessControl', // 对 CRUD 操作执行访问控制
            'postOnly + delete', // 我们只允许通过 POST 请求删除
        );
}

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

允许通过 GET 请求删除。

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

于 2017-06-14T07:34:56.823 回答
-1

尝试更换

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

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

当然你需要在控制器中有一个 findModel($id) 方法

于 2017-01-20T18:16:39.053 回答