Spec-Zone.ru › Yii 1.1

CUniqueValidator

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

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

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

Свойство Тип Описание Определено
allowEmpty boolean указывает, может ли значение атрибута быть null или пустым. CUniqueValidator
attributeName string имя атрибута класса ActiveRecord, которое должно использоваться для поиска значения атрибута, подлежащего проверке. CUniqueValidator
attributes array список атрибутов, которые необходимо проверить. CValidator
builtInValidators array список встроенных валидаторов (имя=>класс) CValidator
caseSensitive boolean указывает, чувствительна ли проверка к регистру. CUniqueValidator
className string имя класса ActiveRecord, которое должно использоваться для поиска значения атрибута, подлежащего проверке. CUniqueValidator
criteria mixed дополнительные критерии запроса. CUniqueValidator
enableClientValidation boolean указывает, нужно ли выполнять проверку на стороне клиента. CValidator
except array список сценариев, к которым валидатор не должен применяться. CValidator
message string пользовательское сообщение об ошибке. CUniqueValidator
on array список сценариев, к которым должен применяться валидатор. CValidator
safe boolean указывает, следует ли считать атрибуты, указанные с этим валидатором, безопасными для массового назначения. CValidator
skipOnError boolean указывает, следует ли пропускать эту проверку, если для текущего атрибута уже есть ошибка проверки. CUniqueValidator

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

Метод Описание Определено
__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, необходимый для выполнения проверки на стороне клиента. CValidator
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
getModel() Если задано имя класса активной записи, возвращает новую модель. CUniqueValidator
isEmpty() Проверяет, пустое ли данное значение. CValidator
validateAttribute() Проверяет атрибут объекта. CUniqueValidator

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

allowEmpty свойство

public boolean $allowEmpty;

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

attributeName свойство

public string $attributeName;

имя атрибута класса ActiveRecord, которое должно использоваться для поиска значения атрибута, подлежащего валидации. По умолчанию null, что означает использование имени атрибута, подлежащего валидации.

См. также

  • className

caseSensitive свойство

public boolean $caseSensitive;

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

className свойство

public string $className;

имя класса ActiveRecord, которое должно использоваться для поиска значения атрибута, подлежащего валидации. По умолчанию null, что означает использование класса объекта, который в настоящее время проходит валидацию. Вы можете использовать псевдоним пути для указания имени класса.

См. также

  • attributeName

criteria свойство

public mixed $criteria;

дополнительные критерии запроса. Может быть массивом или объектом CDbCriteria. Он будет объединён с условием, проверяющим, существует ли значение атрибута в соответствующем столбце таблицы. Этот массив будет использован для создания объекта CDbCriteria.

message свойство

public string $message;

пользовательское сообщение об ошибке. Признаются плейсхолдеры "{attribute}" и "{value}", которые будут заменены фактическим именем атрибута и значением соответственно.

skipOnError свойство (доступно начиная с версии v1.1.1)

public boolean $skipOnError;

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

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

getModel() метод (доступен начиная с версии v1.1.14)

protected CActiveRecord getModel(string $className)
$className строка имя класса активной записи.
{return} CActiveRecord экземпляр модели активной записи.
Исходный код: framework/validators/CUniqueValidator.php#146 (показать)
protected function getModel($className)
{
    return 
CActiveRecord::model($className);
}

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

validateAttribute() метод

protected void validateAttribute(CModel $object, string $attribute)
$object CModel валидируемый объект
$attribute строка валидируемый атрибут
Исходный код: framework/validators/CUniqueValidator.php#80 (показать)
protected function validateAttribute($object,$attribute)
{
    
$value=$object->$attribute;
    if(
$this->allowEmpty && $this->isEmpty($value))
        return;

    if(
is_array($value))
    {
        
// https://github.com/yiisoft/yii/issues/1955
        
$this->addError($object,$attribute,Yii::t('yii','{attribute} is invalid.'));
        return;
    }

    
$className=$this->className===null?get_class($object):Yii::import($this->className);
    
$attributeName=$this->attributeName===null?$attribute:$this->attributeName;
    
$finder=$this->getModel($className);
    
$table=$finder->getTableSchema();
    if((
$column=$table->getColumn($attributeName))===null)
        throw new 
CException(Yii::t('yii','Table "{table}" does not have a column named "{column}".',
            array(
'{column}'=>$attributeName,'{table}'=>$table->name)));

    
$columnName=$column->rawName;
    
$criteria=new CDbCriteria();
    if(
$this->criteria!==array())
        
$criteria->mergeWith($this->criteria);
    
$tableAlias = empty($criteria->alias) ? $finder->getTableAlias(true) : $criteria->alias;
    
$valueParamName = CDbCriteria::PARAM_PREFIX.CDbCriteria::$paramCount++;
    
$criteria->addCondition($this->caseSensitive ? "{$tableAlias}.{$columnName}={$valueParamName}" : "LOWER({$tableAlias}.{$columnName})=LOWER({$valueParamName})");
    
$criteria->params[$valueParamName] = $value;

    if(!
$object instanceof CActiveRecord || $object->isNewRecord || $object->tableName()!==$finder->tableName())
        
$exists=$finder->exists($criteria);
    else
    {
        
$criteria->limit=2;
        
$objects=$finder->findAll($criteria);
        
$n=count($objects);
        if(
$n===1)
        {
            if(
$column->isPrimaryKey)  // primary key is modified and not unique
                
$exists=$object->getOldPrimaryKey()!=$object->getPrimaryKey();
            else
            {
                
// non-primary key, need to exclude the current record based on PK
                
$exists=array_shift($objects)->getPrimaryKey()!=$object->getOldPrimaryKey();
            }
        }
        else
            
$exists=$n>1;
    }

    if(
$exists)
    {
        
$message=$this->message!==null?$this->message:Yii::t('yii','{attribute} "{value}" has already been taken.');
        
$this->addError($object,$attribute,$message,array('{value}'=>$value));
    }
}

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

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

Spec-Zone.ru

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