我需要在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',
),
),
),
));
答案 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',
),
),
),
));
顺便说一下,attachByName
(here)和FilterChain
(here)的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
),
);