Zend_Filters_Input来实现对密码重复验证

22.5.4.  使用 Metacommands 来控制过滤器或校验器规则

除了声明从字段到过滤器或校验器的映射,你可以在数组声明中指定一些 “metacommands” ,开控制一些 Zend_Filter_Input 的可选的行为。 Metacommands 在给定的过滤器或校验器数组值里以字符串索引条目的形式出现。

22.5.4.1. The FIELDS metacommand

如果过滤器或校验器的规则名和需要应用规则的字段名不同,可以用 ‘fields’ metacommand 来指定字段名。

可以用类常量 Zend_Filter_Input::FIELDS 而不是字符串来指定这个 metacommand。

<?php
$filters = array(
    'month' => array(
        'Digits',        // filter name at integer index [0]
        'fields' => 'mo' // field name at string index ['fields']
    )
);

在上例中,过滤器规则使用 ‘digits’ 过滤器给名为 ‘mo’ 的输入字段。 字符串 ‘month’ 变成这个过滤规则的助记键,如果用 ‘fields’ metacommand 指定字段,它不能用做字段名,但可用作规则名。

‘fields’ metacommand 的缺省值是当前规则的索引。在上例中,如果 ‘fields’ metacommand 没有被指定,规则就应用于名为 ‘month’ 的输入字段。

‘fields’ metacommand 的另一个使用是为过滤器或校验器指定字段,这里过滤器或校验器要求多个字段作为输入。 如果 ‘fields’ metacommand 是个数组,过滤器或校验器相应的参数是一个那些字段值的数组。 例如,通常用户会在两个字段中指定密码字符串,他们必需在两个字段中输入相同的字符串。 假定你实现一个校验器类,带有一个数组参数,如果数组中所有的值彼此相等,就返回 true

<?php
$validators = array(
    'password' => array(
        'StringEquals',
        'fields' => array('password1', 'password2')
    )
);
// Invokes hypothetical class Zend_Validate_StringEquals, passing an array argument
// containing the values of the two input data fields named 'password1' and 'password2'.

如果这个规则校验失败,规则键('password')用于 getInvalid() 的返回值,不是命名在 ‘fields’ metacommand 中的其它字段。