Одно из главных правил надежного веб-приложения - это проверка данных поступающих от клиента. Нельзя полагаться на то, что входящие значения будут всегда соответствовать прописанному интерфейсу. И если вместо даты рождения приходит фамилия, приложение не должно выбрасывать исключение о недопустимой операции. Правильно будет указать какие данные содержат ошибку.
В декларативном фреймворке Evado само создание приложения происходит через описание его сущностей в веб-интерфейсе. Таким же образом осуществляется и настройка правил валидации - проверок пользовательского ввода.
Чтобы попробовать декларативно разрабатывать приложение можно даже не ставить вручную окружение - Node.js и MongoDB. Достаточно скопировать репозиторий шаблонного приложения и запустить его в Docker - вы сразу получите готовый веб-интерфейс.
Типовые валидаторы
Типовые валидаторы создаются всегда по умолчанию и зависят от типа данных. Например, значение атрибута с типом «Целочисленный» будет проверено на соответствие целому числу.
Встроенные валидаторы
Встроенные валидаторы активируются флажками на форме атрибута и не имеют дополнительных настроек.
- Обязательно - проверяет наличие данных.
- Только чтение - игнорирует данные полученные от пользователя.
- Уникально - проверяет отсутствие совпадений значения среди других объектов класса. Для настройки особых условий проверки можно использовать отдельный валидатор «Уникальность» (см. далее).
По большему счёту, параметр «Только чтение», как и параметр «Обрезать», который отсекает крайние пробелы значения, относится не к валидации, а к фильтрации данных.
Валидаторы атрибута
Валидаторы атрибута находятся на вкладке «Валидаторы». Для ситуаций, когда разные проверки зависят друг от друга, валидаторы упорядочены по порядковым номерам.
- Строка - проверяет заданную или минимальную/максимальную длину строки.
- Число - проверяет данные на целое число (не актуально для целочисленного атрибута) и минимальное/максимальное значение.
- Дата - проверяет данные на минимальное/максимальное значение. Кроме того, можно указать выражения минимального и максимального значений для динамического вычисления от текущей даты.
- Регулярное выражение - проверяет данные на соответствие заданному шаблону (regex). Можно инвертировать результат проверки, установив флажок «Несовпадение».
- Электронная почта - проверяет соответствие строки формату адреса электронной почты.
- Вычисляемое выражение - проверяет равенство данных результату выражения. Например, ["$+", ".num1", ".num2"] вычисляет сумму значений атрибутов с кодовыми именами num1 и num2. Допустимые выражения можно найти в модулях evad-meta-base/calc.
- Условие - проверяет заданное выражение на соответствие истине. Например, ["$>", ".num1", ".num2"] проверяет больше ли значение атрибута с кодовым именем num1, чем num2.
- Счётчик отношения - проверяет ссылочный атрибут на минимальное/максимальное количество связанных объектов. Здесь необходимо учитывать, что связи могут изменяться вне объекта, в котором определен ссылочный атрибут (обратные ссылки).
- Уникальность - проверяет отсутствие совпадений значений среди других объектов класса. Фильтр позволяет ограничить выборку объектов для сравнений.
- Пользовательский валидатор - конфигурация экземпляра JavaScript класса, который реализован в отдельном файле. Пример такого валидатора можно посмотреть в демо-приложении фреймворка Evado.
Конфигурация создания
Реализации всех валидаторов можно найти в модуле evado-meta-base. Подключить каждый из них можно так же, как и пользовательский валидатор - через описание конфигурации создания. Например, {"Class":"evaso-meta-base/validator/NumberValidator", "min": 12, "max": 24}.
Конфигурации создания - это способ передачи через структуру данных параметров создания объекта.
Class - местоположение JavaScript файла с определением класса. Путь к файлу разрешается либо относительно node_modules, либо корня приложения. Конфигурация передается в конструктор как объект, и её свойства назначаются как свойства экземпляра класса.
Классовые валидаторы
Валидаторы могут быть определены в самом классе и/или представлении. По параметрам они эквиваленты валидаторам атрибута, но в них должны быть указаны атрибуты, к которым они относятся.
Заключение
Готовый пример использования валидации пользовательских данных можно найти в демо-приложении фреймворка Evado и других, доступных в открытом репозитории.