自定义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的清洁剂。

+0

这是什么?我想要Zend的默认行为,即如果验证失败,控件将返回到带有错误消息的页面。 –

+0

然后additionaly添加以下代码: 如果($形式 - >的isValid()){// 重定向到成功页面 }其他{// 什么也不做,显示错误信息,补充形式 } – konradwww

在这里您可以在控制器中添加像这样的自定义验证。

$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有你申请的元素状态的所有错误信息。