Валидатор – это метод проверки
корректности данных при сохранении модели элемента. Если хотя бы один из
валидаторов данных модели возвращает ошибку, модель элемента не может
быть сохранена, в этом случае генерируется исключение (exception) AMI_ModTableItemException.
Добавление валидаторов осуществляется посредством вызова метода addValidators.
Пример:
$this->oTable->addValidators(
array(
'header' => array('filled', 'virtual_field_presence'),
'body' => array('required')
)
);
|
Существуют системные валидаторы:
Группа | Валидатор |
Числовые | 'int', 'float', 'double' |
Символьные | 'char', 'varchar' |
Текстовые | 'tinytext', 'text', 'mediumtext' |
Бинарные данные | 'tinyblob', 'blob', 'mediumblob' |
Дата | 'datetime', 'date', 'time' |
Обязательные поля | 'required', 'filled' |
Поля всех групп, кроме обязательных полей, проверяются на значения и длину, соответствующие аналогичным полям в БД mysql.
Валидатор 'required' отличается от 'filled' тем, что 'required' требует
наличие поля, а 'filled' требует не только наличие, но и неравенство
значения поля пустой строке.
Существует возможность создания
собственных валидаторов. Для добавления собственного валидатора, для
определенности назовем валидатор 'virtual_field_presence', необходимо:
- Добавить созданный валидатор обычным способом посредством вызова addValidators
- Зарегистрировать обработчик события 'on_save_validate_{virtual_field_presence}'
- Имплементировать код обработчика события
Пример:
class DemoModule_TableItem extends AMI_ModTableItem{
public function __construct(AMI_ModTable $oTable, DB_Query $oQuery = null){
parent::__construct($oTable, $oQuery);
$this->oTable->addValidators(
array(
'header' => array('virtual_field_presence'),
)
);
AMI_Event::addHandler('on_save_validate_{virtual_field_presence}', array($this, 'validateVirtualFieldPresence'), $this->getModId());
}
public function validateVirtualFieldPresence($name, array $aEvent, $handlerModId, $srcModId){
if(in_array($aEvent['field'], $aEvent['oItem']->getVirtualFields()){
$aEvent['message'] = 'status_virtual_field';
}
return $aEvent;
}
}
|
Параметры события $aEvent:
Название | Значение | Комментарий |
field | Название поля | |
value | Значение поля | |
oItem | Модель валидируемого элемента | Объект класса, унаследованного от AMI_ModTableItem |
message | Текст ошибки | |
Для того чтобы указать, что валидация не пройдена, необходимо задать непустое значение $aEvent['message'].
Валидаторы
рекомендуется добавлять в конструкторе модели элемента, т.е. только
тогда, когда они действительно могут использоваться.