0

我在下面创建了一个自己的验证类/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让其他开发人员立即知道他们正在使用什么。

4

1 回答 1

0

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

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

$element = $this->getElement('aField');
$myValidateTestValidator = new My_Validate_TestValidator();
$element->addValidator($myValidateTestValidator);
于 2013-02-19T03:21:14.613 回答