Yii 中的条件验证规则
Condtitional Validation rules in Yii
我在 Yii 的自定义验证规则中遇到问题。我有一些字段,例如 day1s
、day1e
、day2s
、day2e
等。我想在创建数据库之前检查这些属性是否具有相同的值存储在我的数据库中新纪录。并检查不同的用户标识。如果一个值已经存在,我想生成一个错误并提示用户更改该值。我想做这样的事情:
array('day1s, day1e, day2s etc','unique','message'=>'day1s is already exist, please change'),
这还不错,但我想修改它。它的默认值为 "00:00"
,如果我放置此规则,则每次创建新记录时都会生成错误,但第一次除外。我想在 day1s==00:00
时忽略它。而且如果用户更改(在我的情况下,用户是 SchoolID)。我在思考如何做到这一点时遇到了麻烦。提前致谢!
在规则中添加 allowEmpty:
array('day1s, day1e, day2s etc','unique','message'=>'day1s is already exist, please change', 'allowEmpty'=>true),
在验证之前的控制器中添加此代码:
if($model->day1s == "00:00") {
$model->day1s = '';
}
抱歉这么晚才回答。在控制器中,您的意思是在我的操作中创建?在 $model->save
之前?我试过了,但它似乎不起作用。我想在我的模型中创建一个这样的函数:
public function unique() {
if ($this->day1s == "00:00" || $this->day1s == "0:00") {
$this->day1s='';//here it seems to work for the 00:00
} else {
//but my rule gets ignored now for any other values. What can I add here to make it work?
}
也很抱歉发布答案而不是编辑我的问题。
我终于想通了:我的规则是这样的:
array('day1s,day1e, day2s, day2e, day3s, day3e, day4s, day4e, day5s, day5e, day6s, day6e, day7s, day7e','unique','message'=>'This already exist, please change', 'allowEmpty'=>true,
'criteria' => array(
'condition' => 'schoolid=:schoolid',
'params' => array(':schoolid' => $this->schoolid))
),
我的控制器是这样的:
if ($model->day1s == "00:00" || $model->day1s == "0:00") {
$model->day1s='';//for custom validation rule 'unique'
}
if ($model->day1e == "00:00" || $model->day1e == "0:00") {
$model->day1e='';
}
.....
if($model->validate()){
if($model->save())
$this->redirect('admin');}
}
再次感谢您的帮助!
我在 Yii 的自定义验证规则中遇到问题。我有一些字段,例如 day1s
、day1e
、day2s
、day2e
等。我想在创建数据库之前检查这些属性是否具有相同的值存储在我的数据库中新纪录。并检查不同的用户标识。如果一个值已经存在,我想生成一个错误并提示用户更改该值。我想做这样的事情:
array('day1s, day1e, day2s etc','unique','message'=>'day1s is already exist, please change'),
这还不错,但我想修改它。它的默认值为 "00:00"
,如果我放置此规则,则每次创建新记录时都会生成错误,但第一次除外。我想在 day1s==00:00
时忽略它。而且如果用户更改(在我的情况下,用户是 SchoolID)。我在思考如何做到这一点时遇到了麻烦。提前致谢!
在规则中添加 allowEmpty:
array('day1s, day1e, day2s etc','unique','message'=>'day1s is already exist, please change', 'allowEmpty'=>true),
在验证之前的控制器中添加此代码:
if($model->day1s == "00:00") {
$model->day1s = '';
}
抱歉这么晚才回答。在控制器中,您的意思是在我的操作中创建?在 $model->save
之前?我试过了,但它似乎不起作用。我想在我的模型中创建一个这样的函数:
public function unique() {
if ($this->day1s == "00:00" || $this->day1s == "0:00") {
$this->day1s='';//here it seems to work for the 00:00
} else {
//but my rule gets ignored now for any other values. What can I add here to make it work?
}
也很抱歉发布答案而不是编辑我的问题。
我终于想通了:我的规则是这样的:
array('day1s,day1e, day2s, day2e, day3s, day3e, day4s, day4e, day5s, day5e, day6s, day6e, day7s, day7e','unique','message'=>'This already exist, please change', 'allowEmpty'=>true,
'criteria' => array(
'condition' => 'schoolid=:schoolid',
'params' => array(':schoolid' => $this->schoolid))
),
我的控制器是这样的:
if ($model->day1s == "00:00" || $model->day1s == "0:00") {
$model->day1s='';//for custom validation rule 'unique'
}
if ($model->day1e == "00:00" || $model->day1e == "0:00") {
$model->day1e='';
}
.....
if($model->validate()){
if($model->save())
$this->redirect('admin');}
}
再次感谢您的帮助!