Валидатор – это метод проверки
корректности данных при сохранении модели элемента. Если хотя бы один из
валидаторов данных модели возвращает ошибку, модель элемента не может
быть сохранена, в этом случае генерируется исключение (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'].
Валидаторы
рекомендуется добавлять в конструкторе модели элемента, т.е. только
тогда, когда они действительно могут использоваться.