我在SO上阅读了这个问题:“how to disable inArray validator forms in zend framework2”并试图找到它,但找不到任何方法来分离/删除InArray
验证器。但InArray
只是 验证程序。那么如何从表单元素的验证器列表中删除验证器呢?
我可以获得验证器:
$myElement = $form->getInputFilter()->get('city');
$validatorChain = $cityElement->getValidatorChain();
$validators = $validatorChain->getValidators();
然后可能可以使用验证器取消设置数组元素,我想删除,然后将结果数组传递回Input对象和表单元素。但它真的很脏,肯定不是推荐的方式。
那么如何从表单元素中删除验证器?
答案 0 :(得分:6)
好吧,你可以用新的验证器替换验证器链。假设我有一个带有两个验证器的元素:
我想从中删除EmailAddress验证器。你可以这样做:
// create new validator chain
$newValidatorChain = new \Zend\Validator\ValidatorChain;
// loop through all validators of the validator chained currently attached to the element
foreach ($form->getInputFilter()->get('myElement')->getValidatorChain()->getValidators() as $validator) {
// attach validator unless it's instance of Zend\Validator\EmailAddress
if (!($validator['instance'] instanceof \Zend\Validator\EmailAddress)) {
$newValidatorChain->addValidator($validator['instance'], $validator['breakChainOnFailure']);
}
}
// replace the old validator chain on the element
$form->getInputFilter()->get('myElement')->setValidatorChain($newValidatorChain);
容易;)
答案 1 :(得分:3)
我发现这适用于1.12.3
在我的更新表格中
$element = new My_Form_Element_Username('username');
$element->setValue('some-value');
$element->removeValidator('Db_NoRecordExists');
$this->addElement($element);
或
$this->addElement(new My_Form_Element_Username('username')
->setValue('some-value')
->removeValidator('Db_NoRecordExists');
My_Form_Element_Username只是扩展了一些Zend_Form_Element并定义了验证器。