3

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

我知道使用 InputFilter 类制作验证器链如何解释zend 文档,例如

    $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',
                ),
            ),
        ),
    ));
4

2 回答 2

9

要回答您的问题,我们需要查看 InputFilter Factory,在那里我们可以找到populateValidators方法。如您所见,对于验证器,它正在寻找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',
            ),
        ),
    ),
));

顺便说一下,(here)和(hereattachByName )的方法签名是不一样的。在您的第一个示例中,您正在调用过滤器链上的方法,该方法根本不支持在失败时中断。(您可能还注意到它是验证器链方法的第三个参数,而不是第二个)FilterChainValidatorChain

于 2013-05-01T12:59:06.223 回答
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
        ),
    );
于 2013-05-01T16:13:35.607 回答