Центр документации
Карта сайта


Новая документация

Настройка платежных систем
Настройка способа оплаты КупиВкредит
Настройка способа оплаты Acquiro
Настройка способа оплаты AvisoSMS

Обновленная документация 

Разработчикам (API)
Руководство пользователя

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

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

  1. Добавить созданный валидатор обычным способом посредством вызова addValidators
  2. Зарегистрировать обработчик события 'on_save_validate_{virtual_field_presence}'
  3. Имплементировать код обработчика события

Пример:

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()){
            // В ключе message массива $aEvent передается параметр с кодом статусного сообщения об ошибке
            $aEvent['message'] = 'status_virtual_field';
        }
        return $aEvent;
    }
}


Параметры события $aEvent:

Название

Значение

Комментарий

field

Название поля

 

value

Значение поля

 

oItem

Модель валидируемого элемента

Объект класса, унаследованного от AMI_ModTableItem

message

Текст ошибки

 


Для того чтобы указать, что валидация не пройдена, необходимо задать непустое значение $aEvent['message'].

Валидаторы рекомендуется добавлять в конструкторе модели элемента, т.е. только тогда, когда они действительно могут использоваться.

Установка и настройка Руководство пользователя Интеграция дизайна Разработчикам (API) Документация для скачивания
 2000 – 2011 © Amiro.CMS Все права защищены.