我在/library/My/Validate/
在我的表单中,我有$this->addElementPrefixPath('My_Validate', 'My/Validate', 'validate');
我正在使用我的验证器:
$this->addElement('text', 'aField', array(
'validators' => array(
array('TestValidator', false, array('messages' => 'test failed')
),
));
这一切都有效。但是,我有兴趣以两种方式改进这一点。
我想这样做,以便所有表单都可以访问我的验证器。在每种形式中调用addElementPrefixPath()
似乎都不是一种干净的方法。
我想传递My_Validate_TestValidator
而不是TestValidator
,以便其他开发者知道他们正在使用的是什么。
答案 0 :(得分:0)
要回答你的第一个问题,唯一真正简单的方法是创建你自己的表单实例 - My_Form_Abstract - 它有一个设置前缀路径的init()方法 - 当然然后调用父类在里面()。
我不知道如何让你的第二种方法完美无瑕地工作。您需要存储前缀才能正确构建验证器加载器。但是,作为替代方法,您可以尝试使用全名创建类的新实例,然后将其添加到元素中:
$element = $this->getElement('aField');
$myValidateTestValidator = new My_Validate_TestValidator();
$element->addValidator($myValidateTestValidator);