Не работают условная валидация и собственная валидация

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
yura1976
Сообщения: 134
Зарегистрирован: 2012.08.06, 13:24

Не работают условная валидация и собственная валидация

Сообщение yura1976 »

В правилах валидации есть следующее?
1.

Код: Выделить всё

 	['currency_id', 'required',
                'when' => function($data){
                    return ($data->pricestart > 0 || $data->priceend > 0);
                }
        ]
Это правило не работает. А именно появляется сообщение о том, что поле currency_id является обязательным независимо от значений pricestart и priceend. А должно быть так: если заполнено хотя бы одно из полей (pricestart или priceend), то выбор currency_id является обязательным.

2. Не работает собственная валидация.
В правилах валидации:

Код: Выделить всё

     ['editionalcontacts', 'validateContacts']; 
 
В модели (даже убрал все условия, при которых ошибка должна выводиться):

Код: Выделить всё

    public function validateContacts($attribute, $params)
    {
        $this->addError($attribute, 'ошибка');
    }
Даже так не работает.
В какую сторону смотреть? Где может быть проблема?
Аватара пользователя
Alexum
Сообщения: 683
Зарегистрирован: 2016.09.26, 10:00

Re: Не работают условная валидация и собственная валидация

Сообщение Alexum »

По-умолчанию валидатор required работает на стороне клиента силами JS в самом простом своём виде. Параметр 'when' используется при валидации на стороне сервера. Т.е. до вашего условия дело не доходит. Тут либо отключать JS-валидацию для поля, добавив к правилу
'enableClientValidation' => false, либо написать реализацию валидатора на JS в параметре 'whenClient':

примерно так:

Код: Выделить всё

'whenClient' => "function (attribute, value) {
                return ($('#названиемодели-pricestart').val() > 0 || $('#названиемодели-priceend').val() > 0);
}"],
yura1976
Сообщения: 134
Зарегистрирован: 2012.08.06, 13:24

Re: Не работают условная валидация и собственная валидация

Сообщение yura1976 »

Alexum писал(а): 2019.08.02, 12:16примерно так:
Спасибо! То что нужно. Еще бы с собственной валидацией разобраться. Было бы вообще супер
Аватара пользователя
Alexum
Сообщения: 683
Зарегистрирован: 2016.09.26, 10:00

Re: Не работают условная валидация и собственная валидация

Сообщение Alexum »

yura1976 писал(а): 2019.08.02, 12:39 Еще бы с собственной валидацией разобраться. Было бы вообще супер
А что в этом поле? Если пустое, то валидатор не сработает пока 'skipOnEmpty' => false не добавить.
yura1976
Сообщения: 134
Зарегистрирован: 2012.08.06, 13:24

Re: Не работают условная валидация и собственная валидация

Сообщение yura1976 »

Alexum писал(а): 2019.08.02, 13:08
yura1976 писал(а): 2019.08.02, 12:39 Еще бы с собственной валидацией разобраться. Было бы вообще супер
А что в этом поле? Если пустое, то валидатор не сработает пока 'skipOnEmpty' => false не добавить.
Обычное текстовое поле

Код: Выделить всё

$form->field($model, 'editionalcontacts')->textInput()
Валидатор не срабатывает даже когда поле заполнено. 'skipOnEmpty' => false тоже добавлял, все-равно не работает. validateContacts вообще не вызывается.
Ответить