Как передать преобразованное значение поля для определенного валидатора в Zend Framework? - PullRequest
1 голос
/ 23 мая 2011

Предположим, у меня есть поле для IP-адреса. Имеет 2 валидатора - Ip - Db_NoRecordsExists

$ip = new Zend_Form_Element_Text('ip');
$ip->setLabel('IP')
   ->setRequired(true)
   ->addValidator('Ip')
   ->addValidator('Db_NoRecordExists', false, array('table' => 'blacklist_ips', 'field' => 'ip'));

В БД ip хранится как целое число, поэтому у меня проблема с проверкой уникальности с использованием Db_NoRecordsExists.

Можно ли передать ip как преобразованный в целое число, но только для одного из валидаторов (потому что в случае конвертации значения поля перед валидацией, Ip validator выдаст ошибку), что-то вроде этого (добавлен новый параметр "value"):

$ip->setLabel('IP')
   ->setRequired(true)
   ->addValidator('Ip')
   ->addValidator('Db_NoRecordExists', false, array('table' => 'blacklist_ips', 'field' => 'ip', 'value' => Custom_Convert_Ip::ip2long([value_of_ip])));

Заранее спасибо.

1 Ответ

1 голос
/ 23 мая 2011

Один из способов - написать собственный валидатор Zend_Validate_Db_NoRecordExists.Например:

class My_Validate_Db_NoRecordExists extends Zend_Validate_Db_NoRecordExists {
    public function isValid($value)
    {
        return parent::isValid(new Zend_Db_Expr("INET_ATON('$value')"));
    }
}

Я не проверял это, но я думаю, что это должно сработать.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...