Условные правила валидации в 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). У меня возникли проблемы с тем, как это сделать. Заранее спасибо!

2 ответа

Решение

Добавьте allowEmpty в правиле:

array('day1s, day1e, day2s etc','unique','message'=>'day1s is already exist, please change', 'allowEmpty'=>true),

В контроллере перед проверкой добавьте этот код:

if($model->day1s == "00:00") {
   $model->day1s = '';
} 

Извините, что так поздно, чтобы ответить. В контроллере ты имеешь ввиду в моём действии Create?Before $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');}
    }  

В очередной раз благодарим за помощь!

Другие вопросы по тегам