kimono
@kimono
Web developer

Как в Yii2 «лаконично» провалидировать одно поле match-валидатором, используя шаблон из другого поля этой же формы?

Для нужд админки использую модели настроек а-ля "Ключ - Значение".
Допустим создадим мы скрытое поле формы, где будем указывать шаблон для валидации поля "Значение". И назовем его "Pattern". Т.е. наша модель - это примерно "Ключ - Значение - Шаблон заполнения".
Для использования валидатора добавляем правило:
[
    //...
    [['value'], 'match',
        'pattern' => /* $this->pattern - не работает, так как для пустых значение сразу выскакивает исключение RegularExpressionValidator-а */,
        'when' => function($model) {
            return $model->pattern; /* это тоже не работает, так как проверка идет дальше */
        }
    ]
]

Вроде бы и не хочется "городить огород", создавая отдельную функцию для валидации, потому что "как бы" есть встроенная. Возможно всё же можно "уговорить" фреймворк? Или нет?
  • Вопрос задан
  • 100 просмотров
Решения вопроса 1
kimono
@kimono Автор вопроса
Web developer
Вобщем, используя стандартный валидатор в таком ключе, мы можем напороться на исключение, если указать корявый шаблон. Решил сделать так:
[
    ['value'],
    function ($attribute, $params, $validator) {
        try {
            if (!preg_match($this->pattern, $this->{$attribute})) {
                $this->addError($attribute, 'Значение не соответствует требуемому шаблону');
            }
        } catch (\Exception $e) {
            $this->addError('pattern', 'Шаблон указан некорректно');
        }
    },
    'when' => function ($model) {
        return $model->pattern;
    },
],
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы