1/YII2: Автоматизируем выставление в input полях ActiveForm атрибутов min и max

Очень часто некоторые новые действия мы делаем "на ощупь" пытаясь сделать по аналогии со знакомым функционалом.

Так было со мной когда мне потребовалось вывести значения атрибутов min и max в полях ActiveForm фреймворка YII2.
Первая мысль сделать по аналогии с maxlength

'maxlength' => true ,

то есть

'min'=> true ,
'max'=> true ,

Но не тут то было, в коде значения из валидатора не подставлялись. Как оказалось в функционале фреймворка такой "фишки" нет.

Решение:

1. Открываем файл /vendor/yiisoft/yii2/helpers/BaseHtml.php
2. Находим функцию

    private static function normalizeMaxLength($model, $attribute, &$options)
    {
        if (isset($options['maxlength']) && $options['maxlength'] === true) {
            unset($options['maxlength']);
            $attrName = static::getAttributeName($attribute);
            foreach ($model->getActiveValidators($attrName) as $validator) {
                if ($validator instanceof StringValidator && $validator->max !== null) {
                    $options['maxlength'] = $validator->max;
                    break;
                }
            }
        }
    }

и ниже вставляем аналогичную ей функцию на наши атрибуты:

    private static function normalizeMinMaxValue($model, $attribute, &$options)
    {
        if (isset($options['min']) && $options['min'] === true) {
            unset($options['min']);
            $attrName = static::getAttributeName($attribute);
            foreach ($model->getActiveValidators($attrName) as $validator) {
                if ($validator instanceof NumberValidator && $validator->min !== null) {
                    $options['min'] = $validator->min;
                    break;
                }
            }
        }
        if (isset($options['max']) && $options['max'] === true) {
            unset($options['max']);
            $attrName = static::getAttributeName($attribute);
            foreach ($model->getActiveValidators($attrName) as $validator) {
                if ($validator instanceof NumberValidator && $validator->max !== null) {
                    $options['max'] = $validator->max;
                    break;
                }
            }
        }
    }

3. Прописываем вызов её... в этом же файле находим

return static::input($type, $name, $value, $options);

и выше вставляем следующий код:

self::normalizeMinMaxValue($model, $attribute, $options);

4. Остаётся только подключить нужное пространство имён в этом же файле...:

use yii\validators\NumberValidator;

Готово! Теперь не надо дублировать числовые значения данных атрибутов из валидатора в форму.