我有一个由选择/下拉列表组成的表单。我将其默认值设置为-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
,但我不认为在这种情况下我可以使用它。
总结一下:如果提交的值不等于默认值,我只希望成功验证我的选择。
答案 0 :(得分: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'));
我希望这就是你要找的东西。