Zend框架2 - 删除形式​​元件导致验证失败(Zend Framework 2 - Remov

2019-08-19 05:16发布

我用一定的形式在几个地方。 在其中的一个我需要忽略我验证后编程设置表单元素。

因为它只是一个例外,我不希望创建一个新的形式。 所以我想,我只是删除这个元素,如控制器:

$myForm->remove('myElement');

问题是,现在的形式将不进行验证。 我没有得到任何错误,但$myForm->isValid()方法会返回一个空值。

任何想法我可能是做错了?

谢谢!

Answer 1:

好吧,我终于找到了解决办法 ! 您可以定义ValidationGroup它允许你设置你想验证的属性。 其他人不验证:

$form->setValidationGroup('name', 'email', 'subject', 'message');
$form->setData($data);
if ($form->isValid()) {
    ...


Answer 2:

我想到的第一件事就是从您的myElement的ValidatorChain删除验证。 你可以在控制器内得到它:

$form->getInputFilter()->get( 'myElement' )->getValidatorChain()

好像你不能从ValidatorChain删除,只是增加。 检查这个职位 。 马修·威尔O'Phinney,从Zend的,解释了为什么它不能做,并为您的方案可能的解决方案。

我解决这个问题的方法,当我创建的FormFilter类的验证器检查“删除条件”。 如果您使用注释,我认为它不为你工作,让马修的建议是你应该使用的。

或者你可以尝试的人在这个职位从@Stoyan Dimov拥有:定义了两种形式,一种BasicForm和ExtendedForm的。 第一个具有所有常见的形式的元素,第二个是另一个用其余字段的扩展之一。 根据你的情况,你可以使用一个或另一个。



Answer 3:

class ValidatorChain implements Countable, ValidatorInterface ,添加一个新方法:

public function remove($name){
    foreach ($this->validators as $key => $element) {
        $validator = $element['instance'];
        if($validator instanceof $name){
            unset($this->validators[$key]);
            break;
        }
    }   
}

使用这样的:

$form->getInputFilter()->get("xxxxx")->getValidatorChain()->remove('xxxxxx');


Answer 4:

必须有你试图删除这个特定的元素定义的验证。

在你的控制器在其中添加新的元素形成,必须有addValidator调用,如:

$元素 - > addValidator( 'alnum');

这实际上是导致确认为失败。 所以,你已删除从表单中的元素,但你仍然有一个元素定义的验证进行检查。

如果您无法找到此验证控制器中添加功能,尝试,看它是否已通过配置文件定义。

您可以对表单验证进一步ZF在这里读到: http://framework.zend.com/manual/1.12/en/zend.form.elements.html



Answer 5:

我删除与元素:

$form->get('product')->remove('version');

当我张贴的形式我禁用此元素的验证:

$form->getInputFilter()->get('product')->get('version')->setRequired(FALSE);


文章来源: Zend Framework 2 - Removed form element causes validation to fail