diff --git a/src/Input.php b/src/Input.php index dbd23cc2..277340be 100644 --- a/src/Input.php +++ b/src/Input.php @@ -313,13 +313,13 @@ protected function injectNotEmptyValidator() } $chain = $this->getValidatorChain(); - // Check if NotEmpty validator is already first in chain + // Check if NotEmpty validator is already in chain $validators = $chain->getValidators(); - if (isset($validators[0]['instance']) - && $validators[0]['instance'] instanceof NotEmpty - ) { - $this->notEmptyValidator = true; - return; + foreach ($validators as $validator) { + if ($validator['instance'] instanceof NotEmpty) { + $this->notEmptyValidator = true; + return; + } } $chain->prependByName('NotEmpty', array(), true); diff --git a/test/InputTest.php b/test/InputTest.php index 911fdc9f..937b3e55 100644 --- a/test/InputTest.php +++ b/test/InputTest.php @@ -240,4 +240,25 @@ public function testMerge() $filters = $filterChain->getFilters()->toArray(); $this->assertInstanceOf('Zend\Filter\StringTrim', $filters[0]); } + + public function testDoNotInjectNotEmptyValidatorIfAnywhereInChain() + { + $input = new Input('foo'); + $this->assertTrue($input->isRequired()); + $input->setValue(''); + + $notEmptyMock = $this->getMock('Zend\Validator\NotEmpty', array('isValid')); + $notEmptyMock->expects($this->exactly(1)) + ->method('isValid') + ->will($this->returnValue(false)); + + $validatorChain = $input->getValidatorChain(); + $validatorChain->addValidator(new Validator\Digits()); + $validatorChain->addValidator($notEmptyMock); + $this->assertFalse($input->isValid()); + + $validators = $validatorChain->getValidators(); + $this->assertEquals(2, count($validators)); + $this->assertEquals($notEmptyMock, $validators[1]['instance']); + } }