Неправильно работает валидация compare на клиенте

Предварительное обсуждение найденных ошибок перед отправкой их авторам фреймворка, а также внесение новых предложений.
Ответить
Toshus
Сообщения: 14
Зарегистрирован: 2018.06.06, 21:06

Неправильно работает валидация compare на клиенте

Сообщение Toshus » 2018.06.06, 21:23

Столкнулся с такой проблемой:
В форме есть два текстовых поля, куда заносится дата: 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' => '!=']
и второе правило compare для finish_date заработало корректно.

Но это все-таки костыль, и правильнее было бы при формировании массива $form.data('yiiActiveForm').attributes для правила compare добавлять поле, указанное в compareAttribute.

goodfriend
Сообщения: 10
Зарегистрирован: 2018.06.02, 09:58

Re: Неправильно работает валидация compare на клиенте

Сообщение goodfriend » 2018.06.07, 06:42

Toshus писал(а):
2018.06.06, 21:23
Но это все-таки костыль,
Это баг.
https://github.com/yiisoft/yii2/issues/15826

Но он не в приоритете у разработчиков фреймворка:
this issue is not in priority for the nearest future

Аватара пользователя
samdark
Администратор
Сообщения: 8811
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: Неправильно работает валидация compare на клиенте

Сообщение samdark » 2018.06.18, 02:55

Если знаете как фикснуть — присылайте pull request.

Ответить