CUniqueValidator
| Пакет | system.validators |
|---|---|
| Наследование | класс CUniqueValidator » CValidator » CComponent |
| С | 1.0 |
| Исходный код | framework/validators/CUniqueValidator.php |
При использовании свойства 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, что означает использование имени атрибута, подлежащего валидации.
См. также
caseSensitive свойство
public boolean $caseSensitive;
указывает, чувствительно ли сравнение к регистру. По умолчанию true. Обратите внимание, что установка в значение false предполагает, что тип атрибута — строка.
className свойство
public string $className;
имя класса ActiveRecord, которое должно использоваться для поиска значения атрибута, подлежащего валидации. По умолчанию null, что означает использование класса объекта, который в настоящее время проходит валидацию. Вы можете использовать псевдоним пути для указания имени класса.
См. также
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 | экземпляр модели активной записи. |
protected function getModel($className)
{
return CActiveRecord::model($className);
}
Возвращает новый экземпляр модели, задавая имя класса активной записи.
validateAttribute() метод
protected void validateAttribute(CModel $object, string $attribute) | ||
| $object | CModel | валидируемый объект |
| $attribute | строка | валидируемый атрибут |
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