2012-11-09 273 views
0

我想在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'); 

現在我想只有當這兩個元素中至少有一個不爲空時,表單纔會被提交。

回答

1

你可以做到這一點骯髒的方式是這樣的:

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

0

在這裏您可以在控制器中添加像這樣的自定義驗證。

$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有你申請的元素狀態的所有錯誤信息。