ZF2删除表单元素的isEmpty验证

时间:2015-01-24 13:00:22

标签: php validation zend-framework zend-framework2 zend-form

我需要使用带有isEmpty验证的表单元素。这是我的代码。

$this->add(array(
    'name' => 'test',
    'type' => 'Zend\Form\Element\Number',
    'attributes' => array(
        'class' => 'form-control',           
    )        
));

但是给出了以下验证消息。

[test] => Array
        (
            [isEmpty] => Value is required and can't be empty
        )

我该如何删除它?

3 个答案:

答案 0 :(得分:1)

您可以通过创建新的ValidatorChain来执行此操作,然后遍历附加到元素的验证程序并取消Zend\Validator\NotEmpty验证程序。就像这样:

$newValidatorChain = new \Zend\Validator\ValidatorChain;

foreach ($form->getInputFilter()->get('test')->getValidatorChain()->getValidators() 
          as $validator) 
{
//Attach all validators except the \Zend\Validator\NotEmpty one

if (!($validator['instance'] instanceof \Zend\Validator\NotEmpty)) {
    $newValidatorChain->addValidator($validator['instance'],
                                     $validator['breakChainOnFailure']);
}
}
$form->getInputFilter()->get('test')->setValidatorChain($newValidatorChain);

希望这可以提供帮助。

答案 1 :(得分:1)

如果您有特定的表单类,请使用验证规则添加getInputFilterSpecification方法:

class MyForm extends \Zend\Form\Form
{
    public function init() // or __construct() if not using element manager
    {
        $this->add(array(
            'name' => 'test',
            'type' => 'Zend\Form\Element\Number',
            'attributes' => array(
                'class' => 'form-control',
            )
        ));
    }

    public function getInputFilterSpecification()
    {
        return [
            'test' => [
                'required' => false,
            ]
        ];
    }
}

答案 2 :(得分:0)

看这里: https://github.com/zendframework/zf2/blob/master/library/Zend/Form/Element/Number.php#L95

你可以扩展这个类并重载getInputSpecification函数并返回数组,而不需要'required'=>真

像这样:

namespace Your\Form\Elements;
use Zend\Form\Element\Number;
class NumberWithoutRequired extends Number{
    public function getInputSpecification()
    {
        return array(
            'name' => $this->getName(),
            'required' => false,
            'filters' => array(
                array('name' => 'Zend\Filter\StringTrim')
            ),
            'validators' => $this->getValidators(),
        );
    }
}

然后使用此类输入您的表单而不是原始Zend\Form\Element\Number