Нужна помощь с проверкой формы Zend - PullRequest
2 голосов
/ 11 марта 2011

В настоящее время я работаю над сайтом с Zend Framework.

Мне нужно было разработать поле местоположения, подобное тому, которое было найдено здесь: http://www.truelocal.com.au/

, которые позволяют пользователю вводить значения PostCode (состоят из 4 цифр) или имя пригорода

Я застрял на данный момент в части проверки формы Zend

В основном мне нужно убедиться, что значения почтовых индексов или имя пригорода существуют в базе данных.

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

$validator = new Zend_Validate_Db_RecordExists('postcodeTable', 'postcode');

Но как я также могу добавить еще одно Подтверждение имени пригорода, чтобы проверить, существует ли имя пригорода в базе данных (без конфликта с проверкой проверки почтового индекса)?

Есть ли простой и понятный способ добиться этого?

Мне нужно написать собственный валидатор? Если так, как я могу это сделать?

Заранее большое спасибо:)

Ответы [ 2 ]

1 голос
/ 12 марта 2011

Я не думаю, что вы можете использовать псевдонимы валидаторов, как вы можете декораторов, но вы можете расширить Zend_Validate_Db_RecordExists, например:

class App_Validate_Db_SuburbExists
    extends Zend_Validate_Db_RecordExists
{

}

Не забудьте добавить prefixPath валидатора вашей библиотеки к элементу, например

$element->addPrefixPath('App_Validate_Db', 'App/Validate/Db', 'validate');

Затем вы можете добавить оба валидатора с разными опциями.

$element->addValidator(
            new App_Validate_Db_SuburbExists('suburbTable', 'suburb'))

        ->addValidator(
            new Zend_Validate_Db_RecordExists('postcodeTable', 'postcode'));
0 голосов
/ 12 марта 2011

Я думаю о пользовательском валидаторе, который является просто прокси

примерно так

$proxyValidator = new App_Validate_Proxy(); //implements Zend_Validate_Interface
$proxyValidator->addValidator($validateDb1);
$proxyValidator->addValidator($validateDb2);

хотя бы один из субвалидаторов должен возвращать true, чтобы считать значение действительным

$ proxyValidator :: isValid ():

public function isValid($value)
{
    foreach($this->_validators as $validator) {
        $validator->isValid($value) ? return true : $this->_messages[] = $validator->getMessages();
    }
    return false;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...