自定义Zend验证器
问题描述:
我想在Zend中创建一个自定义验证器。自定义Zend验证器
例如,我的代码:
$txt_state = new Zend_Form_Element_Text('state');
$txt_state->setLabel('State');
$txt_prop = new Zend_Form_Element_Text('pin');
$txt_prop->setLabel('Property');
现在我想只有当这两个元素中至少有一个不为空时,表单才会被提交。
答
你可以做到这一点肮脏的方式是这样的:
if ($this->getRequest()->isPost()) {
if (is_empty($form->getElement('state')->getValue())) {
$form->getElement('pin')->setRequired();
}
if (is_empty($form->getElement('pin')->getValue())) {
$form->getElement('state')->setRequired();
}
if ($form->isValid()) {
//redirect to success page
} else {
//do nothing, display errors messages, refill form
}
}
或扩展Zend_Form_Element的清洁剂。
答
在这里您可以在控制器中添加像这样的自定义验证。
$state = "YOUR VALUE";
$form->state->setValue($state);
$form->getElement('state')->setRequired();
$form->getElement('state')->addValidator('Alpha', true, array('messages' => array('notAlpha' => "Please enter alphabetic character only in state name.
")));
$mArr = array('state'=>$state);
if(!$form->isValid($mArr)){
$myErrorArray[] = $form->getMessages();
$is_error = 1;
}
这里$ myErrorArray有你申请的元素状态的所有错误信息。
这是什么?我想要Zend的默认行为,即如果验证失败,控件将返回到带有错误消息的页面。 –
然后additionaly添加以下代码: 如果($形式 - >的isValid()){// 重定向到成功页面 }其他{// 什么也不做,显示错误信息,补充形式 } – konradwww