Index: library/Zend/Form/Element.php =================================================================== --- library/Zend/Form/Element.php (revision 24514) +++ library/Zend/Form/Element.php (working copy) @@ -1393,19 +1393,18 @@ if ($this->isRequired() || (!$this->isRequired() && !$this->getAllowEmpty()) ) { - $result = false; + $value = ''; } - } else { - foreach ($value as $val) { - if (!$validator->isValid($val, $context)) { - $result = false; - if ($this->_hasErrorMessages()) { - $messages = $this->_getErrorMessages(); - $errors = $messages; - } else { - $messages = array_merge($messages, $validator->getMessages()); - $errors = array_merge($errors, $validator->getErrors()); - } + } + foreach ((array)$value as $val) { + if (!$validator->isValid($val, $context)) { + $result = false; + if ($this->_hasErrorMessages()) { + $messages = $this->_getErrorMessages(); + $errors = $messages; + } else { + $messages = array_merge($messages, $validator->getMessages()); + $errors = array_merge($errors, $validator->getErrors()); } } } Index: tests/Zend/Form/Element/MultiCheckboxTest.php =================================================================== --- tests/Zend/Form/Element/MultiCheckboxTest.php (revision 24514) +++ tests/Zend/Form/Element/MultiCheckboxTest.php (working copy) @@ -293,12 +293,29 @@ $this->assertTrue($this->element->isValid(array('foo'))); $this->assertTrue($this->element->isValid(array('foo','baz'))); - + $this->element->setAllowEmpty(true); $this->assertTrue($this->element->isValid(array())); - + + // Empty value + AllowEmpty=true = no error messages + $messages = $this->element->getMessages(); + $this->assertEquals(0, count($messages), 'Received unexpected error message(s)'); + $this->element->setAllowEmpty(false); $this->assertFalse($this->element->isValid(array())); + + // Empty value + AllowEmpty=false = notInArray error message + $messages = $this->element->getMessages(); + $this->assertTrue(is_array($messages), 'Expected error message'); + $this->assertArrayHasKey('notInArray', $messages, 'Expected \'notInArray\' error message'); + + $this->element->setRequired(true)->setAllowEmpty(false); + $this->assertFalse($this->element->isValid(array())); + + // Empty value + Required=true + AllowEmpty=false = isEmpty error message + $messages = $this->element->getMessages(); + $this->assertTrue(is_array($messages), 'Expected error message'); + $this->assertArrayHasKey('isEmpty', $messages, 'Expected \'isEmpty\' error message'); } }