从数组创建Zend_Validate对象

时间:2011-03-21 16:16:06

标签: zend-framework zend-form zend-validate

我使用Zend_Form的{​​{1}}方法:

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

2 个答案:

答案 0 :(得分:1)

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

修改

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

相比之下,Zend_Validate::addValidator()的代码似乎实际上需要实际验证器实例

但看起来你可以在这个表单/元素注册表上捎带如下:创建一个表单元素,为元素分配短格式验证器,在元素上调用getValidators()Zend_Form_Element::getValidators()似乎将每个短格式验证器转换为实例),然后将这些验证器一次一个地馈送到Zend_Validate。似乎还有很长的路要走,但它应该有效。

答案 1 :(得分: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');