/** * Validates the attribute using the "exist" validator * @param \yii\base\Model $model the data model to be validated * @param string $attribute the name of the attribute to be validated. */ private function validateExist($model, $attribute) { if ($this->targetClass === null) { throw new InvalidConfigException('The "targetClass" property must be set.'); } if (!is_string($this->targetAttribute)) { throw new InvalidConfigException('The "targetAttribute" property must be configured as a string.'); } $validator = new ExistValidator(); $validator->targetClass = $this->targetClass; $validator->targetAttribute = $this->targetAttribute; $validator->validateAttribute($model, $attribute); }
public function testValidateCompositeKeys() { $val = new ExistValidator(['targetClass' => OrderItem::className(), 'targetAttribute' => ['order_id', 'item_id']]); // validate old record $m = OrderItem::findOne(['order_id' => 1, 'item_id' => 2]); $val->validateAttribute($m, 'order_id'); $this->assertFalse($m->hasErrors('order_id')); // validate new record $m = new OrderItem(['order_id' => 1, 'item_id' => 2]); $val->validateAttribute($m, 'order_id'); $this->assertFalse($m->hasErrors('order_id')); $m = new OrderItem(['order_id' => 10, 'item_id' => 2]); $val->validateAttribute($m, 'order_id'); $this->assertTrue($m->hasErrors('order_id')); $val = new ExistValidator(['targetClass' => OrderItem::className(), 'targetAttribute' => ['id' => 'order_id']]); // validate old record $m = Order::findOne(1); $val->validateAttribute($m, 'id'); $this->assertFalse($m->hasErrors('id')); $m = Order::findOne(1); $m->id = 10; $val->validateAttribute($m, 'id'); $this->assertTrue($m->hasErrors('id')); $m = new Order(['id' => 1]); $val->validateAttribute($m, 'id'); $this->assertFalse($m->hasErrors('id')); $m = new Order(['id' => 10]); $val->validateAttribute($m, 'id'); $this->assertTrue($m->hasErrors('id')); }