Контейнер для клиентской валидации

Предварительное обсуждение найденных ошибок перед отправкой их авторам фреймворка, а также внесение новых предложений.
Ответить
Аватара пользователя
BrusSENS
Сообщения: 565
Зарегистрирован: 2012.07.26, 06:51
Откуда: Новороссийск
Контактная информация:

Контейнер для клиентской валидации

Сообщение BrusSENS »

Собственно столкнулся с траблом, при использовании бутстрапа 4 версии и валидации форм. Невозможно изменить контейнер для применения класса ошибки. Расширение для бутстрапа не рассматриваю, т.к. используется кастом.
Есть идеи как заложить в js возможность смены контейнера?
P.S.: Пока приходит на ум вариант с указанием контейнера и его выбора через switch.
Native Web - небольшой блог о веб разработке (временно на ремонте)
Режим обслуживания сайта для Yii 2.x.x
Аватара пользователя
BrusSENS
Сообщения: 565
Зарегистрирован: 2012.07.26, 06:51
Откуда: Новороссийск
Контактная информация:

Re: Контейнер для клиентской валидации

Сообщение BrusSENS »

Прикинул примерный вариант решения проблемы

ActiveForm.php

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

class ActiveForm
{
    const VALIDATING_CSS_SELECTOR_INPUT = 'input';
    const VALIDATING_CSS_SELECTOR_CONTAINER = 'container';

    public $validatingCssSelector;

    protected function getClientOptions()
    {
        $options = [
           ...
            'validatingCssSelector' => $this->validatingCssSelector,
           ...
        ];
        return array_diff_assoc($options, [
            ...
            'validatingCssSelector' => self::VALIDATING_CSS_SELECTOR_CONTAINER,
            ...
        ]);
    }
}
yii.activeForm.js

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

...
var defaults = {
    ...
    validatingCssSelector: 'container',
    ...
};
...
var updateInput = function ($form, attribute, messages) {
...
    var validatingSelector = undefined;
    switch(data.settings.validatingCssSelector) {
        case 'container':
            validatingSelector = $container;
            break;
        case 'input':
            validatingSelector = $input;
            break;
        default:
            validatingSelector = $container;
            break;
    }
    if (hasError) {
    ...
        validatingSelector.removeClass(data.settings.validatingCssClass + ' ' + data.settings.successCssClass)
            .addClass(data.settings.errorCssClass);
    } else {
        ...
        validatingSelector.removeClass(data.settings.validatingCssClass + ' ' + data.settings.errorCssClass + ' ')
            .addClass(data.settings.successCssClass);
    }
    ...
};
...
Использование ActiveForm

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

$form = ActiveForm::begin([
    ...
    'validatingCssSelector' => ActiveForm::VALIDATING_CSS_SELECTOR_INPUT,
    ...
]);
Native Web - небольшой блог о веб разработке (временно на ремонте)
Режим обслуживания сайта для Yii 2.x.x
Ответить