Создание объекта Zend_Validate из массива - PullRequest
0 голосов
/ 21 марта 2011

У меня есть метод Zend_Form init:

$username_validators = array(
    'Alpha',
    array('StringLength', false, array(3, 20)),
);

$some_form->addElement('text', 'username', array(
    'filters'    => array('StringTrim', 'StringToLower'),
    'validators' => $username_validators,
    'required'   => true,
    'label'      => 'Username:',
));

Можно ли создать Zend_Validate объект, который загружает тот же массив validators, который я передаю addElement? Это было бы что-то вроде:

$v = new Zend_Validate();
//this is the part I'm unsure. Zend_Validate doesn't have an addValidators method.
$v->addValidators($username_validators);
echo $v->isValid('testuser1');

Ответы [ 2 ]

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

Конечно, вы можете добавить коллекцию валидаторов из переменной-члена, если они не требуют каких-либо динамических опций, которые необходимо указать при создании экземпляра.

Edit

Мне кажется, что из коробки вы не можете сделать что-то подобное.Zend_Form имеет загрузчик / реестр плагинов, который позволяет вам использовать «короткие формы» для валидаторов.Загрузчик плагинов настроен с путями и префиксами классов, которые позволяют ему фактически создавать истинные экземпляры валидатора из кратких форм и любых предоставленных опций валидатора.

В отличие от этого, код Zend_Validate::addValidator(), по-видимому, действительно требует фактического экземпляра валидатора .

Но похоже, что вы могли бы использовать эту форму / элементвыполните следующие действия: создайте элемент формы, присвойте элементу краткие валидаторы форм, вызовите элемент getValidators() (кажется, что Zend_Form_Element::getValidators() преобразует каждый валидатор кратких форм в реальный экземпляр), а затем отправьте эти валидаторы по одномув Zend_Validate.Кажется, это далеко, но это должно сработать.

0 голосов
/ 21 марта 2011

Да, вы можете делать то, что вы хотите, если $ username_validators был объявлен и доступен в области действия функции / класса. Если вы используете класс, вы объявите приватную переменную:

private $userVariables;

Затем в конструкторе заполните его:

public function __construct()
{
    $this->userVariables = array(
        //validator options here
    );
}

Теперь вы можете назначать этот единственный валидатор столько раз, сколько хотите, вызывая $ this-> userVariables:

$v = new Zend_Validate();
$v->addValidators($this->userVariables); //this is the part I'm unsure
echo $v->isValid('testuser1');
...