В форме есть два текстовых поля, куда заносится дата: create_date и finish_date.
Настроены вот такие правила валидации - дата в поле finish_date должна быть больше или равна полю create_date:
Код: Выделить всё
[['create_date', 'finish_date'], 'date', 'format' => 'php:Y-m-d'],
[['finish_date'], 'compare', 'compareAttribute' => 'create_date', 'operator' => '>='],
Исследование показало, что в файле yii.validation.js в функции compare производится поиск поля формы, указанного в атрибуте compareAttribute в массиве var attributes = $form.data('yiiActiveForm').attributes, но в этот массив попадают только те поля формы, у которых настроены правила валидации, причем только те, которые работают на стороне клиента.
Т.е. правило [['create_date', 'finish_date'], 'date', 'format' => 'php:Y-m-d'] на клиенте не проверяется и, следовательно поле create_date просто не находится для сравнения. Проблему решил так: добавил еще одно правило:
Код: Выделить всё
[['create_date'], 'compare', 'compareValue' => '', 'operator' => '!=']
Но это все-таки костыль, и правильнее было бы при формировании массива $form.data('yiiActiveForm').attributes для правила compare добавлять поле, указанное в compareAttribute.