Zend框架2如何在fieldsets中使用验证器链

时间:2013-05-01 12:07:50

标签: zend-framework2 zend-validate zend-inputfilter

我需要在fieldset的getInputFilterSpecification方法中使用验证器链来使用breakChainOnFailure参数并只获取一条错误消息。

我知道使用InputFilter类创建验证器链如何解释zend documentation,例如

    $input = new Input('foo');
    $input->getFilterChain()
          ->attachByName('stringtrim', true)  //here there is a breakChainOnFailure
          ->attachByName('alpha');

但是我想用工厂格式做同样的事情。 我在哪里可以将breakChainOnFailure参数放在此示例中:

    $factory = new Factory();
    $inputFilter = $factory->createInputFilter(array(
        'password' => array(
            'name'       => 'password',
            'required'   => true,
            'validators' => array(
                array(
                    'name' => 'not_empty',
                ),
                array(
                    'name' => 'string_length',
                ),
            ),
        ),
    ));

2 个答案:

答案 0 :(得分:9)

要回答您的问题,我们需要查看InputFilter Factory,我们找到了populateValidators method。如您所见,对于验证器,它正在寻找规范中的break_chain_on_failure键。您只需将其添加到验证器规范数组...

$factory = new Factory();
$inputFilter = $factory->createInputFilter(array(
    'password' => array(
        'name'       => 'password',
        'required'   => true,
        'validators' => array(
            array(
                'name' => 'not_empty',
                'break_chain_on_failure' => true,
            ),
            array(
                'name' => 'string_length',
            ),
        ),
    ),
));

顺便说一下,attachByNamehere)和FilterChainhere)的ValidatorChain方法签名不一样。在您的第一个示例中,您将在过滤器链上调用该方法,该过滤器链根本不支持中断故障。 (您可能还会注意到它是验证器链方法的第三个参数,而不是第二个参数)

答案 1 :(得分:0)

检查我的代码,我需要使用验证链规范中的break_chain_on_failure参数,使用验证器类的实例(而不是工厂规范)。

查看示例:

    'password' = array(
        'required' => true,
        'validators' => array(
            new NotEmpty(),  //these are validator instace classes
            new HostName(),  //and them may be declared before
        ),
    );