在yii中删除条件

时间:2014-01-07 05:35:07

标签: php yii

所以这就是我想要做的事情,这就是我的fields表格的样子:

|-----------------------------|
|id   |   field  | is_required|
|-----------------------------|
|1    |   email  |    yes     |
|-----------------------------|
|2    |   phone  |    no      |
|-----------------------------|

现在我已经使用gii为这个表创建了一个视图,它有一个delete field value的选项,现在我要做的就是在actionDelete()我要检查用户的值是否值正在尝试删除是否必要(如果表格的is_required字段为yesno,如果为yes则该字段为必填字段,如果为no 1}}然后该字段不是必需的),如果该字段是必需的,我想显示一个警告“此字段不能被删除,因为它是必填字段”否则删除。 这就是我迄今为止在我的控制器中所做的事情:

public function actionDelete($id)
    {
            $check=Fields::model()->findByAttributes(array('id'=>$id));
                $required=$check->is_required;
                if($required =='no'){
                    $this->loadModel($id)->delete();

                }elseif($required =='yes'){
                    echo "<script>alert('This field cannot be deleted.!');</script>";
                }


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

但这不起作用,你们中任何人都指出我正确的方向..? 提前谢谢。

2 个答案:

答案 0 :(得分:2)

这是一种更好的方法。

首先,将删除条件放在模型中而不是控制器中。您可以使用beforeDelete执行此操作。

public function beforeDelete(){
    if($this->is_required=='no'){
        return true;
    }
    return false;
}

接下来将您的操作更新为a)使用POST代替GET,b)检查记录是否存在

public function actionDelete($id){
    if($this->request->isPostRequest){ //enforce use of POST
        $model=$this->loadModel($id); // loadModel throws an exception if the record doesn't exist
        if($model->delete()){ 
            // do your redirects here
        }else{
            // do something else
        }
    }else{
        throw new CHttpException(400,'Invalid Request');
    }
}

答案 1 :(得分:0)

所以,我找到了一种方法,这里是:

public function actionDelete($id)
{
   $check    = Fields::model()->findByAttributes(array('id'=>$id));
   $required = $check->is_required;
   if($required == 'no') {
     $check->delete();
   } elseif($required == 'yes') {
     throw new CHttpException(400, "This is a required field and cannot be deleted");
   }

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

可能有更好的方法可以做到这一点,如果你们发现任何信息,请告诉我。谢谢你们。 :)