Как использовать YiiConditionalValidator для работы на стороне клиента? - PullRequest
0 голосов
/ 19 ноября 2018

Я использую расширение YiiConditionalValidator.php до Yii 1.1.20. Я хочу иметь обязательное поле (master_id), когда я переключаю кнопку (is_master) с 1 на 0 ...

is_master - 1 или 0 master_id - если "is_master" = 0, сделать "master_id обязательным ...

Итак ... мое модельное правило выглядит так:

public function rules()
{
    return [
        ['is_master', 'required'],
        ['is_master', 'validators.YiiConditionalValidator',
            'if' => [
                ['is_master', 'compare', 'compareValue'=> "0"],
            ],
            'then' => [
                ['master_id', 'required'],
            ],
        ],
        ['is_master, master_id', 'safe', 'on' => 'search'],
    ];
}

И в моей форме я установил следующие параметры:

'enableAjaxValidation' => false,
'enableClientValidation' => true,
'clientOptions' => array(
    'validateOnChange' => true,
    'validateOnSubmit' => true,
),

Кажется, моя $ form не видит этого условного правила ...

Спасибо за любую помощь!

1 Ответ

0 голосов
/ 06 декабря 2018

Хотя никто не знает ^ ____ ^ ... Я провел небольшое исследование, и ответ таков: в YiiConditionalValidator.php отсутствует одна функция ...

Когда вы смотрите на yii 1.1.x framework / validatorsбольшинство из них имеют 2 функции:

  1. защищенная функция validateAttribute ($ object, $ attribute) и
  2. открытая функция clientValidateAttribute ($ object, $ attribute)

И именно поэтому YiiConditionalValidator.php не работает на стороне клиента, поскольку в нем отсутствует открытая функция clientValidateAttribute ($ object, $ attribute), которая «возвращает JavaScript, необходимый для выполнения проверки на стороне клиента» ...

Если вы хотите узнать, как это выглядит, проверьте папку вашего проекта / framework / validators

С наилучшими пожеланиями!Том

...