Zend framework 验证默认值

Zend framework 验证默认值,zend-framework,Zend Framework,我有一个由选择/下拉列表组成的表单。我已将其默认值设置为-1。提交表单时,我希望验证提交的值是否不等于默认值。我尝试了setRequired(true),但据我所知,这只是添加notEmpty验证器的一种方便方法,而这并不是我真正想要的 这是我表格的一部分: $select = new Zend_Form_Element_Select('myselect'); $select->setMultiOptions(array( '

我有一个由选择/下拉列表组成的表单。我已将其默认值设置为-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\u Validate\u idential
,但我认为我不能在这种情况下使用它


总而言之:我只希望在提交的值不等于默认值时成功验证我的选择。

最简单的解决方案是使用空字符串作为默认值:

$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()


我希望这就是您要找的。

谢谢。GreaterThan验证器在这种情况下可以工作,但如果我使用的是文本框,则不能工作。不过,我意识到这不是问题所在。:-)在这种情况下,使用默认值为空的notEmpty验证器也应该有效,因此我将接受答案。然而,你知道如何使用文本框吗?例如,有一个默认值为“在此处输入您的姓名”的文本框。只是一个更新:第一种使用NotEmpty验证器的方法不起作用,所以我使用了第二种有效的方法。:)
$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'));