我想在 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');
现在我希望只有当这两个元素中的至少一个不为空时才必须提交表单。
我想在 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包含您应用于元素状态的所有错误消息。