Валидация данных
Введение
Валидатор - это класс, реализующий интерфейс 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'])