/** * Validate element value * * If a translation adapter is registered, any error messages will be * translated according to the current locale, using the given error code; * if no matching translation is found, the original message will be * utilized. * * Note: The *filtered* value is validated. * * @param mixed $value * @param mixed $context * @return boolean */ public function isValid($value, $context = null) { $this->setValue($value); $value = $this->getValue(); if (('' === $value || null === $value) && !$this->isRequired() && $this->getAllowEmpty()) { return true; } if ($this->isRequired() && $this->autoInsertNotEmptyValidator() && !$this->getValidator('NotEmpty')) { $validators = $this->getValidators(); $notEmpty = array('validator' => 'NotEmpty', 'breakChainOnFailure' => true); array_unshift($validators, $notEmpty); $this->setValidators($validators); } // Find the correct translator. Zend\Validator\AbstractValidator::getDefaultTranslator() // will get either the static translator attached to Zend\Validator\AbstractValidator // or the 'Zend_Translate' from Zend\Registry. if (AbstractValidator::hasDefaultTranslator() && !Form::hasDefaultTranslator()) { $translator = AbstractValidator::getDefaultTranslator(); if ($this->hasTranslator()) { // only pick up this element's translator if it was attached directly. $translator = $this->getTranslator(); } } else { $translator = $this->getTranslator(); } $this->_messages = array(); $this->_errors = array(); $result = true; $isArray = $this->isArray(); foreach ($this->getValidators() as $key => $validator) { if (method_exists($validator, 'setTranslator')) { if (method_exists($validator, 'hasTranslator')) { if (!$validator->hasTranslator()) { $validator->setTranslator($translator); } } else { $validator->setTranslator($translator); } } if (method_exists($validator, 'setDisableTranslator')) { $validator->setDisableTranslator($this->translatorIsDisabled()); } if ($isArray && is_array($value)) { $messages = array(); $errors = array(); 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()); } } } if ($result) { continue; } } elseif ($validator->isValid($value, $context)) { continue; } else { $result = false; if ($this->_hasErrorMessages()) { $messages = $this->_getErrorMessages(); $errors = $messages; } else { $messages = $validator->getMessages(); $errors = array_keys($messages); } } $result = false; $this->_messages = array_merge($this->_messages, $messages); $this->_errors = array_merge($this->_errors, $errors); if ($validator->zfBreakChainOnFailure) { break; } } // If element manually flagged as invalid, return false if ($this->_isErrorForced) { return false; } return $result; }
public function testDefaultTranslatorMethods() { $this->assertFalse(AbstractValidator::hasDefaultTranslator()); $this->assertNull(AbstractValidator::getDefaultTranslator()); $this->assertEquals('default', AbstractValidator::getDefaultTranslatorTextDomain()); $this->assertFalse($this->validator->hasTranslator()); $translatorMock = $this->getMock('Zend\\I18n\\Translator\\Translator'); AbstractValidator::setDefaultTranslator($translatorMock, 'foo'); $this->assertEquals($translatorMock, AbstractValidator::getDefaultTranslator()); $this->assertEquals($translatorMock, $this->validator->getTranslator()); $this->assertEquals('foo', AbstractValidator::getDefaultTranslatorTextDomain()); $this->assertEquals('foo', $this->validator->getTranslatorTextDomain()); $this->assertTrue(AbstractValidator::hasDefaultTranslator()); }