*
  • {value}: replaced with value of the attribute.
  • * * * @see CExistValidator */ class EMongoExistValidator extends CValidator { /** * @var boolean whether the comparison is case sensitive. Defaults to true. * Note, by setting it to false, you are assuming the attribute type is string. */ public $caseSensitive = true; /** * @var string the ActiveRecord class name that should be used to * look for the attribute value being validated. Defaults to null, * meaning using the ActiveRecord class of the attribute being validated. * You may use path alias to reference a class name here. * @see attributeName */ public $className; /** * @var string the ActiveRecord class attribute name that should be * used to look for the attribute value being validated. Defaults to null, * meaning using the name of the attribute being validated. * @see className */ public $attributeName; /** * @var mixed additional query criteria. Either an array or CDbCriteria. * This will be combined with the condition that checks if the attribute * value exists in the corresponding table column. * This array will be used to instantiate a {@link CDbCriteria} object. */ public $criteria = array(); /** * @var boolean whether the attribute value can be null or empty. Defaults to true, * meaning that if the attribute is empty, it is considered valid. */ public $allowEmpty = true; public $mongoId = false; /** * Validates the attribute of the object. * If there is any error, the error message is added to the object. * @param CModel $object the object being validated * @param string $attribute the attribute being validated */ protected function validateAttribute($object, $attribute) { $value = $object->$attribute; if($this->allowEmpty && $this->isEmpty($value)){ return; } $className = $this->className === null ? get_class($object) : Yii::import($this->className); $attributeName = $this->attributeName === null ? $attribute : $this->attributeName; $finder = EMongoDocument::model($className); $criteria = array($attributeName => $this->mongoId ? new MongoId($value) : $value); if(!$finder->exists($criteria)){ $message = $this->message !== null ? $this->message : Yii::t('yii', '{attribute} "{value}" is invalid.'); $this->addError($object, $attribute, $message, array('{value}' => CHtml::encode($value))); } } }