我在User Mapper类userExist($username)
中编写了一个函数return true
,如果我的数据库表中不存在相同的用户名。现在我想在Add_User_Form类中使用此函数,该类扩展了Zend_Form。
我想用:
$username = $this->createElement('text','username');
$username->setLabel('Username:')
->addValidator('Callback', true, array('callback'=>userExist???));
我可以使用mapper class userExist($username)
函数作为回调函数吗?
如果我的实施有问题,请告诉我。我只想在用户已注册时显示错误消息并阻止表单提交。
谢谢。
答案 0 :(得分:2)
您可以使用标准验证器,而不是使用回调验证器:
$element->addValidator('Db_NoRecordExists', true, array('users', 'username'))
Db_NoRecordExists允许您检查数据库的特定表中是否存在记录。
如果用户想要编辑他的个人资料,您可能需要检查记录是否存在除了自身。然后你应该使用相同的验证器:
$where = array('users', 'username', array('field' => 'username', 'value' => $username));
$element->addValidator('Db_NoRecordExists', true, $where)
在这些示例中,users
是数据库表的名称。 username
是您的列名,$username
是您要排除的用户名。
答案 1 :(得分:1)
迟到但这可能是你问题的可能答案。
日期元素示例:
我创建了一个带有自定义Callback验证器的日期元素,该验证器调用同一表单类中的方法。
// Date picker from
$datePickerFrom = new Zend_Form_Element_Text('date_picker_from_date');
$datePickerFrom->setRequired(true)
->setDecorators($this->elementDecorators)
->setLabel('Valid From')
->addFilter('StripTags')
->addFilter('StringTrim')
->setValue(date("d/m/Y",strtotime(Zend_Date::now())))
->addValidator('Callback',true, array('callback' => array($this, 'dateCheck'));
$datePickerFrom->getValidator('Callback')->setMessage("'%value%' Cannot be in the past.");
$this->addElement($datePickerFrom);
如果你有自己的类,其中包含自定义验证器,那么你可以这样做:
$myValidatorClass = new \SomeValidaotrClass();
->addValidator('Callback',true, array('callback' => array($myValidatorClass, 'dateCheck'));
在同一个表单类中,我创建了自定义验证方法:
public function dateCheck($value, $elements, $option)
{
$now = new DateTime();
$fromDate = new DateTime(str_replace('/', '-', $elements['date_picker_from_date']));
if ($fromDate < $now) {
$this->getElement('date_picker_from_date')->getValidator('Callback')->setMessage("'%value%' Cannot be in the past.");
return false;
} else (SomethingElse) {
$this->getElement('date_picker_from_date')->getValidator('Callback')->setMessage("Some other message.");
}
return true;
}
或者如果您使用自己的班级:
class SomeValidaotrClass
{
public function dateCheck($value, $elements, $option)
{
// Validation code...
}
}
如果方法不是public
,则回拨将无法找到它们。