Если в rules() для каждого поля добавить правило типа: “array(‘day’, ‘date’, ‘format’=>array(‘dd’));”, то вполне возможно создать несуществующую дату (например 31.02.1990). Если бы было одно поле, проблем бы не было, но их три. Как можно все эти три поля совместить и проверить на существование даты?
А не удобнее использовать Datapicker (CJuiDatePicker)? Для этого достаточно одного поля типа date. Из плюсов, можно указывать валидный период времени например с 1940-2000г.
public function rules()
{
return array(
...
array('date', 'groupDateValid'),
...
);
}
...
public function groupDateValid($attribute, $params)
{
if(isset($this->$attribute['day']) && isset($this->$attribute['month']) && isset($this->$attribute['year'])) {
// у checkdate порядок атрибутов именно такой: месяц, день, год
if(!checkdate($this->$attribute['month'], $this->$attribute['day'], $this->$attribute['year'])) {
$this->addError($attribute, 'Дата не существует');
}
} elseif(!isset($params['allowEmpty'])) {
$this->addError($attribute, 'Поле обязательно для заполнения');
}
}