所以这就是我想要做的事情,这就是我的fields
表格的样子:
|-----------------------------|
|id | field | is_required|
|-----------------------------|
|1 | email | yes |
|-----------------------------|
|2 | phone | no |
|-----------------------------|
现在我已经使用gii为这个表创建了一个视图,它有一个delete field value
的选项,现在我要做的就是在actionDelete()
我要检查用户的值是否值正在尝试删除是否必要(如果表格的is_required
字段为yes
或no
,如果为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'));
}
但这不起作用,你们中任何人都指出我正确的方向..? 提前谢谢。
答案 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'));
}
可能有更好的方法可以做到这一点,如果你们发现任何信息,请告诉我。谢谢你们。 :)