如何在Zend Framework中为特定验证器传递转换后的字段值?

时间:2011-05-23 12:10:23

标签: zend-framework validation

假设我有一个IP地址字段。它有2个验证器 - 是的 - Db_NoRecordsExists

$ip = new Zend_Form_Element_Text('ip');
$ip->setLabel('IP')
   ->setRequired(true)
   ->addValidator('Ip')
   ->addValidator('Db_NoRecordExists', false, array('table' => 'blacklist_ips', 'field' => 'ip'));

在DB ip中存储为整数,因此我在使用Db_NoRecordsExists进行唯一验证时遇到问题。

是否可以将ip转换为整数,但仅用于验证器之一(因为在验证之前转换字段值,Ip验证器将给出错误),类似这样(添加新参数“value”):

$ip->setLabel('IP')
   ->setRequired(true)
   ->addValidator('Ip')
   ->addValidator('Db_NoRecordExists', false, array('table' => 'blacklist_ips', 'field' => 'ip', 'value' => Custom_Convert_Ip::ip2long([value_of_ip])));

提前致谢。

1 个答案:

答案 0 :(得分:1)

一种方法是编写自己的验证器Zend_Validate_Db_NoRecordExists。例如:

class My_Validate_Db_NoRecordExists extends Zend_Validate_Db_NoRecordExists {
    public function isValid($value)
    {
        return parent::isValid(new Zend_Db_Expr("INET_ATON('$value')"));
    }
}

我还没有测试过,但我认为应该这样做。

希望它有所帮助。