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,但我认为在这种情况下我不能使用它。

总结一下:如果提交的值不等于默认值,我只希望我的选择能够成功验证。

4

1 回答 1

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'));

我希望这就是你要找的。

于 2012-07-19T00:53:36.903 回答