diff --git a/src/ArrayInput.php b/src/ArrayInput.php index 2ee27809..d23b9d81 100644 --- a/src/ArrayInput.php +++ b/src/ArrayInput.php @@ -71,7 +71,7 @@ public function isValid($context = null) if (! $hasValue && $required) { if ($this->errorMessage === null) { - $this->setErrorMessage('Value is required'); + $this->errorMessage = $this->prepareRequiredValidationFailureMessage(); } return false; } diff --git a/src/FileInput.php b/src/FileInput.php index 48aa010e..b195306a 100644 --- a/src/FileInput.php +++ b/src/FileInput.php @@ -125,7 +125,7 @@ public function isValid($context = null) if (! $hasValue && $required && ! $this->hasFallback()) { if ($this->errorMessage === null) { - $this->setErrorMessage('Value is required'); + $this->errorMessage = $this->prepareRequiredValidationFailureMessage(); } return false; } diff --git a/src/Input.php b/src/Input.php index 50c98fc6..6342040b 100644 --- a/src/Input.php +++ b/src/Input.php @@ -404,7 +404,7 @@ public function isValid($context = null) if (! $hasValue && $required) { if ($this->errorMessage === null) { - $this->setErrorMessage('Value is required'); + $this->errorMessage = $this->prepareRequiredValidationFailureMessage(); } return false; } @@ -483,4 +483,18 @@ protected function injectNotEmptyValidator() $chain->prependValidator(new NotEmpty(), true); } + + /** + * Create and return the validation failure message for required input. + * + * @return string[] + */ + protected function prepareRequiredValidationFailureMessage() + { + $notEmpty = new NotEmpty(); + $templates = $notEmpty->getOption('messageTemplates'); + return [ + NotEmpty::IS_EMPTY => $templates[NotEmpty::IS_EMPTY], + ]; + } } diff --git a/test/InputTest.php b/test/InputTest.php index bd88157c..2f99d8d8 100644 --- a/test/InputTest.php +++ b/test/InputTest.php @@ -17,6 +17,7 @@ use Zend\InputFilter\Input; use Zend\InputFilter\InputInterface; use Zend\Validator; +use Zend\Validator\NotEmpty; use Zend\Validator\ValidatorChain; /** @@ -34,6 +35,21 @@ public function setUp() $this->input = new Input('foo'); } + public function assertRequiredValidationErrorMessage($input, $message = '') + { + $message = $message ?: 'Expected failure message for required input'; + $message .= ';'; + + $messages = $input->getMessages(); + $this->assertInternalType('array', $messages, $message . ' non-array messages array'); + + $notEmpty = new NotEmpty(); + $messageTemplates = $notEmpty->getOption('messageTemplates'); + $this->assertSame([ + NotEmpty::IS_EMPTY => $messageTemplates[NotEmpty::IS_EMPTY], + ], $messages, $message . ' missing NotEmpty::IS_EMPTY key and/or contains additional messages'); + } + public function testConstructorRequiresAName() { $this->assertEquals('foo', $this->input->getName()); @@ -172,20 +188,24 @@ public function testRequiredWithoutFallbackAndValueNotSetThenFail() $input->isValid(), 'isValid() should be return always false when no fallback value, is required, and not data is set.' ); - $this->assertEquals(['Value is required'], $input->getMessages(), 'getMessages() value not match'); + $this->assertRequiredValidationErrorMessage($input); } - public function testRequiredWithoutFallbackAndValueNotSetThenFailWithCustomErrorMessage() + /** + * @group 28 + * @group 60 + */ + public function testRequiredWithoutFallbackAndValueNotSetProvidesNotEmptyValidatorIsEmptyErrorMessage() { $input = $this->input; $input->setRequired(true); - $input->setErrorMessage('fooErrorMessage'); $this->assertFalse( $input->isValid(), - 'isValid() should be return always false when no fallback value, is required, and not data is set.' + 'isValid() should always return false when no fallback value is present, ' + . 'the input is required, and no data is set.' ); - $this->assertEquals(['fooErrorMessage'], $input->getMessages(), 'getMessages() value not match'); + $this->assertRequiredValidationErrorMessage($input); } public function testNotRequiredWithoutFallbackAndValueNotSetThenIsValid()