我正在使用yii2,我想在调用$ model-> createValidators()之后为模型添加一些额外的属性和验证规则。
但是当我尝试使用下面的代码时,在“$ this-> {$ attr-> code} = null”这一行,它会抛出错误:“设置未知属性”。
public function rules(){
$rules = [];
if(!is_null($this->attributeSetId)){ // set the rules for custom attributes
foreach($this->attributeSet->attributeGroups as $group){
foreach($group->productAttributes as $attr){
if($attr->required=="1")
$rules[] = [[$attr->code], 'required'];
else
$rules[] = [[$attr->code], 'safe'];
$this->{$attr->code} = null; // trying to set new property to the model (this is the line causing error)
}
}
}
return array_merge([
[['attributeSetId', 'parent', 'typeId'], 'integer'],
[['attributeSetId'], 'required'],
], $rules);
}
我知道在使用上面的方法实例化它之后可以向对象声明属性,但它在上述情况下不起作用。
当我手动将属性设置为: “public $ propertyName;” 在模型的开头,它的工作完美,但就我而言,属性列表是动态的。
有人可以对此有所了解吗?
编辑: