Spec-Zone.ru › Yii 1.1

CCompareValidator

Пакет system.validators
Наследование класс CCompareValidator » CValidator » CComponent
С момента 1.0
Исходный код framework/validators/CCompareValidator.php
CCompareValidator сравнивает значение указанного атрибута с другим значением и проверяет, равны ли они.

Сравниваемое значение может быть другим значением атрибута (указанным через compareAttribute) или константой (указанной через compareValue). Когда оба значения указаны, приоритет отдаётся второму. Если ни одно из них не указано, атрибут будет сравниваться с другим атрибутом, имя которого получено добавлением "_repeat" к имени исходного атрибута.

Сравнение может быть строгим (strict) или нестрогим.

CCompareValidator поддерживает различные операторы сравнения. Ранее он только сравнивал, равны ли два значения или нет.

При использовании свойства message для определения пользовательского сообщения об ошибке, сообщение может содержать дополнительные плейсхолдеры, которые будут заменены фактическим содержимым. В дополнение к плейсхолдеру "{attribute}", распознаваемому всеми валидаторами (см. CValidator), CCompareValidator позволяет указать следующие плейсхолдеры:
  • {compareValue}: заменяется постоянным значением для сравнения (compareValue).
  • {compareAttribute}: заменяется меткой атрибута, с которым сравнивается (compareAttribute).

Общественные свойства

Свойство Тип Описание Определено
allowEmpty boolean указывает, может ли значение атрибута быть null или пустым. CCompareValidator
attributes массив список атрибутов, подлежащих валидации. CValidator
builtInValidators массив список встроенных валидаторов (имя=>класс) CValidator
compareAttribute строка имя атрибута, с которым следует сравнить CCompareValidator
compareValue строка постоянное значение для сравнения CCompareValidator
enableClientValidation boolean выполнять ли проверку на стороне клиента. CValidator
except массив список сценариев, для которых валидатор не должен применяться. CValidator
message строка пользовательское сообщение об ошибке. CValidator
on массив список сценариев, для которых валидатор должен применяться. CValidator
operator строка оператор для сравнения. CCompareValidator
safe boolean указывает, следует ли считать атрибуты, указанные с этим валидатором, безопасными для массового назначения. CValidator
skipOnError boolean пропустить ли эту проверку, если для текущего атрибута уже есть ошибка проверки. CValidator
strict boolean указывает, является ли сравнение строгим (и значение, и тип должны совпадать). CCompareValidator

Общественные методы

Метод Описание Определено
__call() Вызывает метод с указанным именем, который не является методом класса. CComponent
__get() Возвращает значение свойства, список обработчиков событий или поведение на основе его имени. CComponent
__isset() Проверяет, является ли значение свойства null. CComponent
__set() Устанавливает значение свойства компонента. CComponent
__unset() Устанавливает свойство компонента в значение null. CComponent
applyTo() Возвращает значение, указывающее, применяется ли валидатор к указанному сценарию. CValidator
asa() Возвращает объект поведения с заданным именем. CComponent
attachBehavior() Присоединяет поведение к этому компоненту. CComponent
attachBehaviors() Присоединяет список поведений к компоненту. CComponent
attachEventHandler() Присоединяет обработчик событий к событию. CComponent
canGetProperty() Определяет, можно ли считать свойство. CComponent
canSetProperty() Определяет, можно ли установить свойство. CComponent
clientValidateAttribute() Возвращает JavaScript, необходимый для выполнения проверки на стороне клиента. CCompareValidator
createValidator() Создаёт объект валидатора. CValidator
detachBehavior() Отсоединяет поведение от компонента. CComponent
detachBehaviors() Отсоединяет все поведения от компонента. CComponent
detachEventHandler() Отсоединяет существующего обработчика событий. CComponent
disableBehavior() Отключает присоединённое поведение. CComponent
disableBehaviors() Отключает все присоединённые к этому компоненту поведения. CComponent
enableBehavior() Включает присоединённое поведение. CComponent
enableBehaviors() Включает все присоединённые к этому компоненту поведения. CComponent
evaluateExpression() Вычисляет PHP-выражение или обратный вызов в контексте этого компонента. CComponent
getEventHandlers() Возвращает список присоединённых обработчиков событий для события. CComponent
hasEvent() Определяет, определено ли событие. CComponent
hasEventHandler() Проверяет, есть ли присоединённые обработчики для события с указанным именем. CComponent
hasProperty() Определяет, определено ли свойство. CComponent
raiseEvent() Возбуждает событие. CComponent
validate() Проверяет указанный объект. CValidator

Защищённые методы

Метод Описание Определено в
addError() Добавляет ошибку об указанном атрибуте в активную запись. CValidator
isEmpty() Проверяет, является ли заданное значение пустым. CValidator
validateAttribute() Проверяет атрибут объекта. CCompareValidator

Подробное описание свойств

allowEmpty свойство

public boolean $allowEmpty;

указывает, может ли значение атрибута быть нулевым или пустым. По умолчанию — false. Если значение true, атрибут считается валидным, когда он пустой.

compareAttribute свойство

public string $compareAttribute;

имя атрибута, с которым следует сравнить.

compareValue свойство

public string $compareValue;

постоянное значение для сравнения.

operator свойство

public string $operator;

оператор для сравнения. По умолчанию — '='. Допустимые операторы:

  • '=' или '==': проверяет, равны ли два значения. Если strict — true, сравнение выполняется в строгом режиме (т. е. проверяется и тип значения).
  • '!=': проверяет, не равны ли два значения. Если strict — true, сравнение выполняется в строгом режиме (т. е. проверяется и тип значения).
  • '>': проверяет, больше ли проверяемое значение значения для сравнения.
  • '>=': проверяет, больше или равно ли проверяемое значение значению для сравнения.
  • '<': проверяет, меньше ли проверяемое значение значения для сравнения.
  • '<=': проверяет, меньше или равно ли проверяемое значение значению для сравнения.

strict свойство

public boolean $strict;

указывает, является ли сравнение строгим (должны совпадать и значение, и тип). По умолчанию — false.

Подробное описание методов

clientValidateAttribute() метод (доступен с версии v1.1.7)

public string clientValidateAttribute(CModel $object, string $attribute)
$object CModel валидируемый объект данных
$attribute string имя атрибута для проверки.
{return} string скрипт проверки на стороне клиента.
Исходный код: framework/validators/CCompareValidator.php#139 (показать)
public function clientValidateAttribute($object,$attribute)
{
    if(
$this->compareValue !== null)
    {
        
$compareTo=$this->compareValue;
        
$compareValue=CJSON::encode($this->compareValue);
    }
    else
    {
        
$compareAttribute=$this->compareAttribute === null ? $attribute . '_repeat' : $this->compareAttribute;
        
$compareValue="jQuery('#" . (CHtml::activeId($object, $compareAttribute)) . "').val()";
        
$compareTo=$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='parseFloat(value)<=parseFloat('.$compareValue.')';
            break;
        case 
'>=':
            if(
$message===null)
                
$message=Yii::t('yii','{attribute} must be greater than or equal to "{compareValue}".');
            
$condition='parseFloat(value)<parseFloat('.$compareValue.')';
            break;
        case 
'<':
            if(
$message===null)
                
$message=Yii::t('yii','{attribute} must be less than "{compareValue}".');
            
$condition='parseFloat(value)>=parseFloat('.$compareValue.')';
            break;
        case 
'<=':
            if(
$message===null)
                
$message=Yii::t('yii','{attribute} must be less than or equal to "{compareValue}".');
            
$condition='parseFloat(value)>parseFloat('.$compareValue.')';
            break;
        default:
            throw new 
CException(Yii::t('yii','Invalid operator "{operator}".',array('{operator}'=>$this->operator)));
    }

    
$message=strtr($message,array(
        
'{attribute}'=>$object->getAttributeLabel($attribute),
        
'{compareAttribute}'=>$compareTo,
    ));

    return 
"
if("
.($this->allowEmpty ? "jQuery.trim(value)!='' && " : '').$condition.") {
messages.push("
.CJSON::encode($message).".replace('{compareValue}', ".$compareValue."));
}
"
;
}

Возвращает JavaScript-код, необходимый для проверки на стороне клиента.

См. также

  • CActiveForm::enableClientValidation

validateAttribute() метод

protected void validateAttribute(CModel $object, string $attribute)
$object CModel валидируемый объект
$attribute string валидируемый атрибут
Исходный код: framework/validators/CCompareValidator.php#82 (показать)
protected function validateAttribute($object,$attribute)
{
    
$value=$object->$attribute;
    if(
$this->allowEmpty && $this->isEmpty($value))
        return;
    if(
$this->compareValue!==null)
        
$compareTo=$compareValue=$this->compareValue;
    else
    {
        
$compareAttribute=$this->compareAttribute===null ? $attribute.'_repeat' : $this->compareAttribute;
        
$compareValue=$object->$compareAttribute;
        
$compareTo=$object->getAttributeLabel($compareAttribute);
    }

    switch(
$this->operator)
    {
        case 
'=':
        case 
'==':
            if((
$this->strict && $value!==$compareValue) || (!$this->strict && $value!=$compareValue))
                
$message=$this->message!==null?$this->message:Yii::t('yii','{attribute} must be repeated exactly.');
            break;
        case 
'!=':
            if((
$this->strict && $value===$compareValue) || (!$this->strict && $value==$compareValue))
                
$message=$this->message!==null?$this->message:Yii::t('yii','{attribute} must not be equal to "{compareValue}".');
            break;
        case 
'>':
            if(
$value<=$compareValue)
                
$message=$this->message!==null?$this->message:Yii::t('yii','{attribute} must be greater than "{compareValue}".');
            break;
        case 
'>=':
            if(
$value<$compareValue)
                
$message=$this->message!==null?$this->message:Yii::t('yii','{attribute} must be greater than or equal to "{compareValue}".');
            break;
        case 
'<':
            if(
$value>=$compareValue)
                
$message=$this->message!==null?$this->message:Yii::t('yii','{attribute} must be less than "{compareValue}".');
            break;
        case 
'<=':
            if(
$value>$compareValue)
                
$message=$this->message!==null?$this->message:Yii::t('yii','{attribute} must be less than or equal to "{compareValue}".');
            break;
        default:
            throw new 
CException(Yii::t('yii','Invalid operator "{operator}".',array('{operator}'=>$this->operator)));
    }
    if(!empty(
$message))
        
$this->addError($object,$attribute,$message,array('{compareAttribute}'=>$compareTo,'{compareValue}'=>$compareValue));
}

Проверяет атрибут объекта. Если обнаружена ошибка, сообщение об ошибке добавляется к объекту.

© 2008–2017 by Yii Software LLC
Licensed under the three clause BSD license.
http://www.yiiframework.com/doc/api/1.1/CCompareValidator

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API