2012-07-18 140 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