2012-07-18 116 views
0

我有一個由選擇/下拉列表組成的表單。我已將它們的默認值設置爲-1。提交表單時,我想驗證提交的值不等於默認值。我試過setRequired(true),但據我所知,這只是添加notEmpty驗證程序的一種方便的方式,這實際上並不是我想要的。驗證默認值

這裏是我的表格的一部分:

$select = new Zend_Form_Element_Select('myselect'); 
    $select->setMultiOptions(array(
         '-1' => 'Gender', 
         '0' => 'Female', 
         '1' => 'Male' 
        )) 
        ->addValidator(new Zend_Validate_Int(), false); 

    $this->setDefaults(array('myselect' => -1)); 

這裏是我的控制器:

if ($this->getRequest()->isPost()) { 
      $form = new My_Form_Contact(); 

      if ($form->isValidPartial(array('myselect' => $this->getRequest()->getPost('myselect')))) { 
       // "myselect" is valid 
      } 

我需要使用isValidPartial方法,因爲我需要使用取決於哪些元素不同的邏輯具有與其默認值不同的值。我想我需要的是一個notEqual驗證器,但我找不到一個驗證器。我知道可以製作我自己的驗證器,但我想問問首先是否有更簡單的方法。我也看過Zend_Validate_Identical,但我不認爲我可以在這種情況下使用它。

總結:我只希望我的選擇被驗證成功,如果提交的值不等於默認值。

回答

1

最簡單的解決方法是使用一個空字符串作爲默認:

$select->setMultiOptions(array(
        '' => 'Gender', 
        '0' => 'Female', 
        '1' => 'Male' 
       )) 
       ->addValidator(new Zend_Validate_Int(), false) 
       ->addValidator(new Zend_Validate_NotEmpty(), false); 

$this->setDefaults(array('myselect' => '')); 

但我猜你已經想到這一點,並從某些原因,打折了。

所以,接下來最簡單的就是使用GreaterThan()

$select->setMultiOptions(array(
        '-1' => 'Gender', 
        '0' => 'Female', 
        '1' => 'Male' 
       )) 
       ->addValidator(new Zend_Validate_Int(), false) 
       ->addValidator(new Zend_Validate_GreaterThan(-1), false); 

$this->setDefaults(array('myselect' => '-1')); 

我希望這是你在找什麼。

+0

謝謝。 GreaterThan驗證器將在這種情況下工作,但如果我使用的是文本框,則不會。不過,我意識到這不是問題。 :-)在這種情況下,使用帶空默認值的notEmpty驗證器也可以工作,所以我會接受答案。但是,你有什麼想法如何去與文本框?例如,有一個默認值爲「在此輸入您的名字」的文本框。 – Andy0708 2012-07-19 18:05:46

+0

只是一個更新:與NotEmpty驗證程序的第一個方法拒絕如此工作,所以我去了第二個工作。 :) – Andy0708 2012-07-19 19:37:31