diff --git a/framework/validators/CompareValidator.php b/framework/validators/CompareValidator.php index eb3edc6..1df09c4 100644 --- a/framework/validators/CompareValidator.php +++ b/framework/validators/CompareValidator.php @@ -59,6 +59,45 @@ class CompareValidator extends Validator */ public $operator = '='; + + /** + * Initializes the validator. + */ + public function init() + { + parent::init(); + if ($this->message === null) { + switch ($this->operator) { + case '==': + $this->message = Yii::t('yii|{attribute} must be repeated exactly.'); + break; + case '===': + $this->message = Yii::t('yii|{attribute} must be repeated exactly.'); + break; + case '!=': + $this->message = Yii::t('yii|{attribute} must not be equal to "{compareValue}".'); + break; + case '!==': + $this->message = Yii::t('yii|{attribute} must not be equal to "{compareValue}".'); + break; + case '>': + $this->message = Yii::t('yii|{attribute} must be greater than "{compareValue}".'); + break; + case '>=': + $this->message = Yii::t('yii|{attribute} must be greater than or equal to "{compareValue}".'); + break; + case '<': + $this->message = Yii::t('yii|{attribute} must be less than "{compareValue}".'); + break; + case '<=': + $this->message = Yii::t('yii|{attribute} must be less than or equal to "{compareValue}".'); + break; + default: + throw new InvalidConfigException("Unknown operator: {$this->operator}"); + } + } + } + /** * Validates the attribute of the object. * If there is any error, the error message is added to the object. @@ -69,6 +108,10 @@ class CompareValidator extends Validator public function validateAttribute($object, $attribute) { $value = $object->$attribute; + if (is_array($value)) { + $this->addError($object, $attribute, Yii::t('yii|{attribute} is invalid.')); + return; + } if ($this->compareValue !== null) { $compareLabel = $compareValue = $this->compareValue; } else { @@ -78,56 +121,21 @@ class CompareValidator extends Validator } switch ($this->operator) { - case '==': - if ($value != $compareValue) { - $message = ($this->message !== null) ? $this->message : Yii::t('yii|{attribute} must be repeated exactly.'); - $this->addError($object, $attribute, $message, array('{compareAttribute}' => $compareLabel)); - } - break; - case '===': - if ($value !== $compareValue) { - $message = ($this->message !== null) ? $this->message : Yii::t('yii|{attribute} must be repeated exactly.'); - $this->addError($object, $attribute, $message, array('{compareAttribute}' => $compareLabel)); - } - break; - case '!=': - if ($value == $compareValue) { - $message = ($this->message !== null) ? $this->message : Yii::t('yii|{attribute} must not be equal to "{compareValue}".'); - $this->addError($object, $attribute, $message, array('{compareAttribute}' => $compareLabel, '{compareValue}' => $compareValue)); - } - break; - case '!==': - if ($value === $compareValue) { - $message = ($this->message !== null) ? $this->message : Yii::t('yii|{attribute} must not be equal to "{compareValue}".'); - $this->addError($object, $attribute, $message, array('{compareAttribute}' => $compareLabel, '{compareValue}' => $compareValue)); - } - break; - case '>': - if ($value <= $compareValue) { - $message = ($this->message !== null) ? $this->message : Yii::t('yii|{attribute} must be greater than "{compareValue}".'); - $this->addError($object, $attribute, $message, array('{compareAttribute}' => $compareLabel, '{compareValue}' => $compareValue)); - } - break; - case '>=': - if ($value < $compareValue) { - $message = ($this->message !== null) ? $this->message : Yii::t('yii|{attribute} must be greater than or equal to "{compareValue}".'); - $this->addError($object, $attribute, $message, array('{compareAttribute}' => $compareLabel, '{compareValue}' => $compareValue)); - } - break; - case '<': - if ($value >= $compareValue) { - $message = ($this->message !== null) ? $this->message : Yii::t('yii|{attribute} must be less than "{compareValue}".'); - $this->addError($object, $attribute, $message, array('{compareAttribute}' => $compareLabel, '{compareValue}' => $compareValue)); - } - break; - case '<=': - if ($value > $compareValue) { - $message = ($this->message !== null) ? $this->message : Yii::t('yii|{attribute} must be less than or equal to "{compareValue}".'); - $this->addError($object, $attribute, $message, array('{compareAttribute}' => $compareLabel, '{compareValue}' => $compareValue)); - } - break; - default: - throw new InvalidConfigException("Unknown operator: {$this->operator}"); + case '==': $valid = $value == $compareValue; break; + case '===': $valid = $value === $compareValue; break; + case '!=': $valid = $value != $compareValue; break; + case '!==': $valid = $value !== $compareValue; break; + case '>': $valid = $value > $compareValue; break; + case '>=': $valid = $value >= $compareValue; break; + case '<': $valid = $value < $compareValue; break; + case '<=': $valid = $value <= $compareValue; break; + default: $valid = false; break; + } + if (!$valid) { + $this->addError($object, $attribute, $this->message, array( + '{compareAttribute}' => $compareLabel, + '{compareValue}' => $compareValue, + )); } } @@ -135,6 +143,7 @@ class CompareValidator extends Validator * Validates the given value. * @param mixed $value the value to be validated. * @return boolean whether the value is valid. + * @throws InvalidConfigException if [[compareValue]] is not set. */ public function validateValue($value) { @@ -151,8 +160,6 @@ class CompareValidator extends Validator case '>=': return $value >= $this->compareValue; case '<': return $value < $this->compareValue; case '<=': return $value <= $this->compareValue; - default: - throw new InvalidConfigException("Unknown operator \"{$this->operator}\""); } } @@ -173,51 +180,8 @@ class CompareValidator extends Validator $compareValue = "\$('#" . (CHtml::activeId($object, $compareAttribute)) . "').val()"; $compareLabel = $object->getAttributeLabel($compareAttribute); } - - $message = $this->message; - switch ($this->operator) { - case '=': - case '==': - if ($message === null) { - $message = Yii::t('yii|{attribute} must be repeated exactly.'); - } - $condition = 'value!=' . $compareValue; - break; - case '!=': - if ($message === null) { - $message = Yii::t('yii|{attribute} must not be equal to "{compareValue}".'); - } - $condition = 'value==' . $compareValue; - break; - case '>': - if ($message === null) { - $message = Yii::t('yii|{attribute} must be greater than "{compareValue}".'); - } - $condition = 'value<=' . $compareValue; - break; - case '>=': - if ($message === null) { - $message = Yii::t('yii|{attribute} must be greater than or equal to "{compareValue}".'); - } - $condition = 'value<' . $compareValue; - break; - case '<': - if ($message === null) { - $message = Yii::t('yii|{attribute} must be less than "{compareValue}".'); - } - $condition = 'value>=' . $compareValue; - break; - case '<=': - if ($message === null) { - $message = Yii::t('yii|{attribute} must be less than or equal to "{compareValue}".'); - } - $condition = 'value>' . $compareValue; - break; - default: - throw new InvalidConfigException("Unknown operator: {$this->operator}"); - } - - $message = strtr($message, array( + $condition = "value {$this->operator} $compareValue"; + $message = strtr($this->message, array( '{attribute}' => $object->getAttributeLabel($attribute), '{compareValue}' => $compareLabel, )); diff --git a/framework/validators/NumberValidator.php b/framework/validators/NumberValidator.php index 226df12..915419e 100644 --- a/framework/validators/NumberValidator.php +++ b/framework/validators/NumberValidator.php @@ -53,6 +53,24 @@ class NumberValidator extends Validator /** + * Initializes the validator. + */ + public function init() + { + parent::init(); + if ($this->message === null) { + $this->message = $this->integerOnly ? Yii::t('yii|{attribute} must be an integer.') + : Yii::t('yii|{attribute} must be a number.'); + } + if ($this->min !== null && $this->tooSmall === null) { + $this->tooSmall = Yii::t('yii|{attribute} must be no less than {min}.'); + } + if ($this->max !== null && $this->tooBig === null) { + $this->tooBig = Yii::t('yii|{attribute} must be no greater than {max}.'); + } + } + + /** * Validates the attribute of the object. * If there is any error, the error message is added to the object. * @param \yii\base\Model $object the object being validated @@ -65,24 +83,15 @@ class NumberValidator extends Validator $this->addError($object, $attribute, Yii::t('yii|{attribute} is invalid.')); return; } - if ($this->integerOnly) { - if (!preg_match($this->integerPattern, "$value")) { - $message = $this->message !== null ? $this->message : Yii::t('yii|{attribute} must be an integer.'); - $this->addError($object, $attribute, $message); - } - } else { - if (!preg_match($this->numberPattern, "$value")) { - $message = $this->message !== null ? $this->message : Yii::t('yii|{attribute} must be a number.'); - $this->addError($object, $attribute, $message); - } + $pattern = $this->integerOnly ? $this->integerPattern : $this->numberPattern; + if (!preg_match($pattern, "$value")) { + $this->addError($object, $attribute, $this->message); } if ($this->min !== null && $value < $this->min) { - $message = $this->tooSmall !== null ? $this->tooSmall : Yii::t('yii|{attribute} must be no less than {min}.'); - $this->addError($object, $attribute, $message, array('{min}' => $this->min)); + $this->addError($object, $attribute, $this->tooSmall, array('{min}' => $this->min)); } if ($this->max !== null && $value > $this->max) { - $message = $this->tooBig !== null ? $this->tooBig : Yii::t('yii|{attribute} must be no greater than {max}.'); - $this->addError($object, $attribute, $message, array('{max}' => $this->max)); + $this->addError($object, $attribute, $this->tooBig, array('{max}' => $this->max)); } } @@ -107,12 +116,7 @@ class NumberValidator extends Validator public function clientValidateAttribute($object, $attribute) { $label = $object->getAttributeLabel($attribute); - - if (($message = $this->message) === null) { - $message = $this->integerOnly ? Yii::t('yii|{attribute} must be an integer.') - : Yii::t('yii|{attribute} must be a number.'); - } - $message = strtr($message, array( + $message = strtr($this->message, array( '{attribute}' => $label, )); @@ -123,10 +127,7 @@ if(!value.match($pattern)) { } "; if ($this->min !== null) { - if (($tooSmall = $this->tooSmall) === null) { - $tooSmall = Yii::t('yii|{attribute} must be no less than {min}.'); - } - $tooSmall = strtr($tooSmall, array( + $tooSmall = strtr($this->tooSmall, array( '{attribute}' => $label, '{min}' => $this->min, )); @@ -138,10 +139,7 @@ if(value<{$this->min}) { "; } if ($this->max !== null) { - if (($tooBig = $this->tooBig) === null) { - $tooBig = Yii::t('yii|{attribute} must be no greater than {max}.'); - } - $tooBig = strtr($tooBig, array( + $tooBig = strtr($this->tooBig, array( '{attribute}' => $label, '{max}' => $this->max, )); diff --git a/framework/validators/RequiredValidator.php b/framework/validators/RequiredValidator.php index febee9b..3b13eb3 100644 --- a/framework/validators/RequiredValidator.php +++ b/framework/validators/RequiredValidator.php @@ -47,7 +47,8 @@ class RequiredValidator extends Validator { parent::init(); if ($this->message === null) { - $this->message = $this->requiredValue === null ? Yii::t('yii|{attribute} is invalid.') : Yii::t('yii|{attribute} must be "{requiredValue}".'); + $this->message = $this->requiredValue === null ? Yii::t('yii|{attribute} is invalid.') + : Yii::t('yii|{attribute} must be "{requiredValue}".'); } } diff --git a/framework/validators/Validator.php b/framework/validators/Validator.php index b75f86e..5ab8dfe 100644 --- a/framework/validators/Validator.php +++ b/framework/validators/Validator.php @@ -245,8 +245,9 @@ abstract class Validator extends Component */ public function addError($object, $attribute, $message, $params = array()) { + $value = $object->$attribute; $params['{attribute}'] = $object->getAttributeLabel($attribute); - $params['{value}'] = $object->$attribute; + $params['{value}'] = is_array($value) ? 'array()' : $value; $object->addError($attribute, strtr($message, $params)); }