0

我在 aZend_Forminit方法中有这个:

$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的相同数组的对象?它会是这样的:validatorsaddElement

$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');
4

2 回答 2

1

当然,您可以从成员变量添加验证器集合,只要它们不需要在实例化时指定的任何动态选项。

编辑

在我看来,开箱即用,你不能做类似的事情。Zend_Form 有一个插件加载器/注册表,使您能够为验证器使用“短表单”。插件加载器配置了路径和类前缀,允许它从短格式和任何提供的验证器选项实际创建真正的验证器实例。

相反, 的代码Zend_Validate::addValidator()似乎实际上需要一个实际的验证器实例

但看起来你可以像下面这样在这个表单/元素注册表上捎带:创建一个表单元素,为元素分配短表单验证器,调用getValidators()元素(Zend_Form_Element::getValidators()似乎将每个短表单验证器转换为真实实例),以及然后将这些验证器一次一个输入Zend_Validate. 似乎还有很长的路要走,但它应该工作。

于 2011-03-21T16:25:48.887 回答
0

是的,只要 $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');
于 2011-03-21T16:55:10.210 回答