如何在全球范围内访问自定义验证器?

时间:2013-02-01 16:49:54

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

我在/library/My/Validate/

下创建了一个我自己的验证类

在我的表单中,我有$this->addElementPrefixPath('My_Validate', 'My/Validate', 'validate');

我正在使用我的验证器:

$this->addElement('text', 'aField', array(
    'validators' => array(
        array('TestValidator', false, array('messages' => 'test failed')
    ), 
));

这一切都有效。但是,我有兴趣以两种方式改进这一点。

  1. 我想这样做,以便所有表单都可以访问我的验证器。在每种形式中调用addElementPrefixPath()似乎都不是一种干净的方法。

  2. 我想传递My_Validate_TestValidator而不是TestValidator,以便其他开发者知道他们正在使用的是什么。

1 个答案:

答案 0 :(得分:0)

要回答你的第一个问题,唯一真正简单的方法是创建你自己的表单实例 - My_Form_Abstract - 它有一个设置前缀路径的init()方法 - 当然然后调用父类在里面()。

我不知道如何让你的第二种方法完美无瑕地工作。您需要存储前缀才能正确构建验证器加载器。但是,作为替代方法,您可以尝试使用全名创建类的新实例,然后将其添加到元素中:

$element = $this->getElement('aField');
$myValidateTestValidator = new My_Validate_TestValidator();
$element->addValidator($myValidateTestValidator);