假设我有一个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])));
提前致谢。
答案 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')"));
}
}
我还没有测试过,但我认为应该这样做。
希望它有所帮助。