Возникли проблемы с проверкой Zend (Zend_Validate_Db_NoRecordExists) - PullRequest
1 голос
/ 02 июля 2011

Я настраиваю страницу регистрации пользователя и проверяю в поле имени пользователя, которое проверяет, во-первых, не существует ли пользователь, во-вторых, не является ли имя пользователя зарезервированным.Моя проблема в том, что когда я присоединяю два валидатора к элементу формы, он игнорирует вторую валидацию.Вторая проверка будет работать только в том случае, если первая проверка будет удалена.Это ошибка?Если так, как я могу это исправить?

Ниже приведены валидаторы:

    $validator = new Zend_Validate_Db_NoRecordExists(
                    array(
                        'table' => 'users',
                        'field' => 'username'
                    )
    );
    $validator->setMessage('Username %value% already exists', Zend_Validate_Db_Abstract::ERROR_RECORD_FOUND);

    $reserved_validator = new Zend_Validate_Db_NoRecordExists(
                    array(
                        'table' => 'reserved_users',
                        'field' => 'name'
                    )
    );
    $reserved_validator->setMessage('Username %value% is not available', Zend_Validate_Db_Abstract::ERROR_RECORD_FOUND);

Затем на элементе у меня есть:

            ->addValidator($validator)
            ->addValidator($reserved_validator)

Ответы [ 2 ]

2 голосов
/ 02 июля 2011

Существует проблема при использовании двух валидаторов одного типа. Что вам нужно сделать, это добавить цепочку валидатора:

$validatorChain = new Zend_Validate();
$validatorChain->addValidator($validator)                            
               ->addValidator($reserved_validator);

И просто добавьте цепочку к элементу.

->addValidator($validatorChain);
0 голосов
/ 02 июля 2011

Нет, это не ошибка, это дизайн, я бы сказал.Вы можете иметь несколько типов валидаторов, но только по одному типу.Вы должны посмотреть на валидатор БД, если он позволяет объединять таблицы.До сих пор я никогда не использовал валидаторы БД.

Обновление Только что заметил другой ответ, что цепочка должна сработать.

...