Валидация данных

Введение

Валидатор - это класс, реализующий интерфейс jandcode.core.dbm.validate.Validator.

Нужно реализовать метод validate, который получает в качестве параметра контекст валидации jandcode.core.dbm.validate.ValidatorContext.

Все валидаторы работают в контексте экземпляра jandcode.core.dbm.mdb.Mdb.

Регистрация валидатора

<dbm>
    <model name="my-model">
        <validator name="mycheck1"
                   class="my.pak1.Validator_mycheck1"
                   attr1="1"/>
    </model>
</dbm>

Валидаторы регистрируются на уровне модели.

Для валидатора указывается class, реализующий интерфейс jandcode.core.dbm.validate.Validator. Все остальные атрибуты используются как атрибуты контекста при выполнении валидатора.

Валидаторы для домена и поля

<dbm>
    <model name="my-model">
        <domain name="MyDomain1">

            <!-- валидаторы записи -->

            <!-- mycheck1 - имя зарегистрированного валидатора
                 атрибуты перекрывают атрибуты, указанные при регистрации валидатора
            -->
            <validator name="mycheck1" attr1="2"/>

            <!-- mycheck1 - имя зарегистрированного валидатора,
                 в этом случае имя узла может быть произвольным
             -->
            <validator name="any-name" validator="mycheck1"/>

            <!-- валидаторы для полей указываются внутри тега поля
                 для таких валидаторов дополнительно ставится атрибут field,
                 с именем поля, где валидатор используется
            -->
            <field name="f1">
                <validator name="mycheck1" attr1="2"/>
                <validator name="any-name" validator="mycheck1"/>
            </field>

            <!-- можно описывать валидаторы для поля вне поля,
                 для этого просто укажите в атрибуте field для какого поля
                 этот валидатор
             -->
            <validator name="any-name" validator="mycheck1" field="f1"/>

        </domain>
    </model>
</dbm>

Прямой вызов валидатора

Пример:

mdb.validate(rec, "minmax", [field: "f1", min: 2, max: 20, title: "Поле f1"])

Здесь для объекта-записи rec вызывается валидатор с именем minmax и атрибутам, среди которых явно указывается поле f1, которое нужно проверять.

Валидация конкретного поля

Пример:

mdb.validateField(rec, "f1")

Здесь для объекта-записи rec вызывается валидатор с именем field. Этот валидатор запускает все зарегистрированные для поля валидаторы.

Условие: запись должна обладать информацией о домене. Если такой информации нет, нужно явно указать домен в атрибутах:

mdb.validateField(rec, "f1", [domain:'MyDomain1'])

Валидация записи

Пример:

mdb.validateRecord(rec)

Здесь для объекта-записи rec вызывается валидатор с именем record. Этот валидатор запускает для каждого поля валидатор field, а затем все зарегистрированные валидаторы для записи в целом.

Условие: запись должна обладать информацией о домене. Если такой информации нет, нужно явно указать домен в атрибутах:

mdb.validateRecord(rec, [domain:'MyDomain1'])