Валидация
Простые валидаторы
-
min
(number): для чисел - минимальное число, для строк - минимальная длина строки -
max
(number): для чисел - максимальное число, для строк - максимальная длина строки -
required
(boolean): для любых элементов, означает обязательность заполнения -
pattern
(string): регулярное выражение для текстовых инпутов
Пример:
{
id: "alias",
span: 6,
label: "Альяс",
help: "Текстовая подпись",
name: "me-input",
attrs: { type: "text", pattern: "[0-9a-z_]+", min: 0, max: 100 },
}
Серверные валидаторы
Управляются через параметр refPvmValidator
, который является полным аналогом refPvmData
, только загружает результаты валидации
{
id: "name",
label: "Название",
span: 12,
name: "me-input",
refPvmValidator: {id: "name_validator"}
}
Вызываемый скрипт name_validator
не обязательно должен иметь именно такое назывние.
Должен быть описан на странице формы или объявлен на спец. странице с ролью Валидаторы и, в таком случае,
указан в форме так: refPvmValidator: {id: "#entity.name_validator"}
.
<script db-alias="meta_samples" depends="name" id="name_validator" type="meta/sql">
SELECT 'name_validator_unique' as id, 'Имя уже используется' as name FROM public.example_entity WHERE name = :env.sp.name LIMIT 1
</script>
Валидация для обычных форм
Приведена часть страницы для примера:
<script type="meta/js" id="editCard" elem="hidden" states="default">
function main(vm, pvm, env) {
.....
vm.elems = [
{
id: "name",
label: "Название",
span: 12,
name: "me-input",
// Валидатор при это объявлен на уровне entity на странице "Валидаторы" с соответствующей ролью страницы
// Таким образом мы настраиваем валидатор на поле.
refPvmValidator: {id: "#entity.name_validator"}, <--- настройки серверного валидатора. Префикс "#entity." указывает на то, что скрипт name_validator описан на странице с ролью "Валидаторы" в текущей entity
attrs: {
required: true, <--- обычные валидаторы
min: 2, <--- обычные валидаторы
max: 30 <--- обычные валидаторы
}
},
.....
];
}
</script>
Валидация смарт-форм
Смарт-формы являются частью платформы и так же нуждаются в простой настройке валидаторов.
Настройка делается в yaml-файле нужной вам entity через указание lego_elem
как для обычных валидаторов типа min
, max
и пр., так и для серверной валидации через refPvmValidator
.
Для примера приведена только часть полей:
id: 'example_entity'
name: Пример
db_alias: meta_samples
schema: public
table: example_entity
i18n: true
fields:
- name: id
db_type: uuid
is_primary: true
is_hidden: true
- name: name
db_type: text
is_title: true
is_required: true
display_name: Название
i18n: true
lego_elem:
refPvmValidator:
id: '#entity.name_validator' <--- настройки серверного валидатора. Префикс "#entity." указывает на то, что скрипт name_validator описан на странице с ролью "Валидаторы" в текущей entity
....
- name: cost
db_type: numeric
i18n: true
display_name: Стоимость
lego_elem:
attrs:
max: 2000 <------ настройка обычных валидаторов