META

Валидация

Простые валидаторы

  • 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>

Пример 1

Пример 2

Валидация смарт-форм

Смарт-формы являются частью платформы и так же нуждаются в простой настройке валидаторов.

Настройка делается в 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 <------ настройка обычных валидаторов

Пример 1