How to remove a validator from a Form Element / Form Element ValidatorChain in Zend Framework 2?

前端 未结 2 1563
一整个雨季
一整个雨季 2021-01-06 07:33

I read this question on SO: \"how to disable inArray validator forms in zend framework2\" and was trying to find it out, but couldn\'t find any way to detach/remove the

相关标签:
2条回答
  • 2021-01-06 07:44

    I found this to work with 1.12.3

    in my update form

    $element = new My_Form_Element_Username('username');
    $element->setValue('some-value');
    $element->removeValidator('Db_NoRecordExists');
    $this->addElement($element);
    

    or

    $this->addElement(new My_Form_Element_Username('username')
      ->setValue('some-value')
      ->removeValidator('Db_NoRecordExists');
    

    My_Form_Element_Username just extends some Zend_Form_Element and has the validators defined.

    0 讨论(0)
  • 2021-01-06 08:05

    Well, you could just replace the validator chain with a new one. Let's say I have an element with two validators:

    • Zend\Validator\NotEmpty
    • Zend\Validator\EmailAddress

    And I want to remove the EmailAddress validator from it. You could do something like this:

    // 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);
    

    Easy ;)

    0 讨论(0)
提交回复
热议问题