ii中的条件验证规则


Condtitional Validation rules in Yii

我在Yii中有一个自定义验证规则的问题。我有一些领域如day1s, day1e, day2s, day2e等。在创建新记录之前,我想检查这些属性是否具有相同的值存储在我的db中。还要检查不同的用户标识。如果一个值已经存在,我希望生成一个错误并提示用户更改该值。我想这样做:

 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 = '';
} 

很抱歉这么晚才回复。在控制器中,你是指在我的动作Create中吗?在$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');}
    }  

再次感谢您的帮助!