Добавить клиентский валидатор

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
Аватара пользователя
maleks
Сообщения: 1992
Зарегистрирован: 2012.12.26, 12:56

Добавить клиентский валидатор

Сообщение maleks »

Приветствую.
Видел это, буду пробовать советы оттуда, но может кто делал недавно и знает как сделать специфичный клиентский валидатор
- там специальная логика, поле одно, второе, третье сравнивает
- чтобы навешивалось на поле, и соответственно пересчитывалось, при изменении

, ну т.е. как бы чтобы работал как любой встроенный валидатор, то код js мой
german.igortcev
Сообщения: 251
Зарегистрирован: 2014.08.18, 14:01

Re: Добавить клиентский валидатор

Сообщение german.igortcev »

Прочитайте документацию, там есть пример
Аватара пользователя
maleks
Сообщения: 1992
Зарегистрирован: 2012.12.26, 12:56

Re: Добавить клиентский валидатор

Сообщение maleks »

german.igortcev писал(а): 2021.05.26, 13:05 Прочитайте документацию, там есть пример
Вы про это?
Думал может как попроще есть, просто снаружи на js ошибку на поле навешивать, как по примеру с php кастомными правилами:

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

    public function rules()
    {
        return [
            // an inline validator defined as the model method validateCountry()
            ['country', 'validateCountry'],
        ];
    }

    public function validateCountry($attribute, $params, $validator)
    {
        if (!in_array($this->$attribute, ['USA', 'Indonesia'])) {
            $this->addError($attribute, 'The country must be either "USA" or "Indonesia".');
        }
    }
rak
Сообщения: 2181
Зарегистрирован: 2010.11.02, 23:40
Контактная информация:

Re: Добавить клиентский валидатор

Сообщение rak »

maleks писал(а): 2021.05.26, 14:00
german.igortcev писал(а): 2021.05.26, 13:05 Прочитайте документацию, там есть пример
Вы про это?
Думал может как попроще есть, просто снаружи на js ошибку на поле навешивать, как по примеру с php кастомными правилами:

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

    public function rules()
    {
        return [
            // an inline validator defined as the model method validateCountry()
            ['country', 'validateCountry'],
        ];
    }

    public function validateCountry($attribute, $params, $validator)
    {
        if (!in_array($this->$attribute, ['USA', 'Indonesia'])) {
            $this->addError($attribute, 'The country must be either "USA" or "Indonesia".');
        }
    }
так а что там сложного? ещё 1 класс создать вместо метода в модели? :?
german.igortcev
Сообщения: 251
Зарегистрирован: 2014.08.18, 14:01

Re: Добавить клиентский валидатор

Сообщение german.igortcev »

maleks писал(а): 2021.05.26, 14:00
german.igortcev писал(а): 2021.05.26, 13:05 Прочитайте документацию, там есть пример
Вы про это?
Думал может как попроще есть, просто снаружи на js ошибку на поле навешивать, как по примеру с php кастомными правилами:

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

    public function rules()
    {
        return [
            // an inline validator defined as the model method validateCountry()
            ['country', 'validateCountry'],
        ];
    }

    public function validateCountry($attribute, $params, $validator)
    {
        if (!in_array($this->$attribute, ['USA', 'Indonesia'])) {
            $this->addError($attribute, 'The country must be either "USA" or "Indonesia".');
        }
    }

Если на клиента то там есть еще пример с when
Аватара пользователя
maleks
Сообщения: 1992
Зарегистрирован: 2012.12.26, 12:56

Re: Добавить клиентский валидатор

Сообщение maleks »

rak писал(а): 2021.05.26, 15:03 так а что там сложного? ещё 1 класс создать вместо метода в модели? :?
Я, обычно, когда прилично js кода предпочитаю чтобы он был в js файле.
Особенно когда логика касается всей формы, а не какого то одного поля.
unknownby
Сообщения: 749
Зарегистрирован: 2019.11.05, 16:34
Контактная информация:

Re: Добавить клиентский валидатор

Сообщение unknownby »

maleks писал(а): 2021.05.26, 10:43 Приветствую.
Видел это, буду пробовать советы оттуда, но может кто делал недавно и знает как сделать специфичный клиентский валидатор
- там специальная логика, поле одно, второе, третье сравнивает
- чтобы навешивалось на поле, и соответственно пересчитывалось, при изменении

, ну т.е. как бы чтобы работал как любой встроенный валидатор, то код js мой
Сложно будет, если использовать в форме enableAjaxValidation и логику в модели? Это касается только валидности данных.
А пересчитывание это уже не валидность данных, а метод, который будет выполнен после того как данные изменятся и перезапишутся в БД.
Не всегда нужно всё писать на js :)
german.igortcev
Сообщения: 251
Зарегистрирован: 2014.08.18, 14:01

Re: Добавить клиентский валидатор

Сообщение german.igortcev »

Сделайте обычные валидаторы в модели и отправляйте через AJAX , пройдет обычная валидация и вернет ошибки
Аватара пользователя
maleks
Сообщения: 1992
Зарегистрирован: 2012.12.26, 12:56

Re: Добавить клиентский валидатор

Сообщение maleks »

Сделал через clientValidateAttribute(), аяксом как раз я такое обычно и валидировал всегда, но тут потребовалось js
Ответить