1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- <?php
- /**
- * EExistValidator validates that the attribute value exists in a table.
- *
- * This validator is often used to verify that a foreign key contains a value
- * that can be found in the foreign table.
- *
- * When using the {@link message} property to define a custom error message, the message
- * may contain additional placeholders that will be replaced with the actual content. In addition
- * to the "{attribute}" placeholder, recognized by all validators (see {@link CValidator}),
- * CExistValidator allows for the following placeholders to be specified:
- * <ul>
- * <li>{value}: replaced with value of the attribute.</li>
- * </ul>
- *
- * @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)));
- }
- }
- }
|