在行为yii2的init中获取模型的属性

在行为yii2的init中获取模型的属性,yii2,yii2-advanced-app,Yii2,Yii2 Advanced App,这是我的密码: class CalculatedFieldsBehavior extends Behavior { public $calcFields = array(); public function events() { return [ ActiveRecord::EVENT_INIT => 'init', ]; } public function init() { for

这是我的密码:

class CalculatedFieldsBehavior extends Behavior {
    public $calcFields = array();

    public function events() {
        return [
            ActiveRecord::EVENT_INIT => 'init',
        ];
    }

    public function init() {
        foreach ($this->owner->attributes() as $attribute) {
            if (strpos($attribute, 'calc_')) {
                if (!is_function(get_parent_class()::$set . \yii\helpers\camelize($attribute))) {
                    throw Exception("Function to set value of calc field '" . $attribute . "' not defined.");
                }

                $calcFields[] = $attribute;
            }
        }

        if (!($this->owner->hasAttribute('isCalcValueSet'))) {
            throw Exception("This table is missing a field for isCalcValueSet");
        }

        parent::init();
    }
}
并给出以下错误:

$owner在init中不可用。这是设定的。工作流通常如下所示:

$behavior = new MyBehavior(); // init() is called here
$behavior->attach($owner); // owner is set here
在您的情况下,您可能应该覆盖attach:

public function attach($owner) {
    foreach ($owner->attributes() as $attribute) {
        if (strpos($attribute, 'calc_')) {
            if (!is_function(get_parent_class()::$set . \yii\helpers\camelize($attribute))) {
                throw Exception("Function to set value of calc field '" . $attribute . "' not defined.");
            }

            $calcFields[] = $attribute;
        }
    }

    if (!($owner->hasAttribute('isCalcValueSet'))) {
        throw Exception("This table is missing a field for isCalcValueSet");
    }

    parent::attach($owner);
}

可以移动parent::init;到初始化的第一行?
public function attach($owner) {
    foreach ($owner->attributes() as $attribute) {
        if (strpos($attribute, 'calc_')) {
            if (!is_function(get_parent_class()::$set . \yii\helpers\camelize($attribute))) {
                throw Exception("Function to set value of calc field '" . $attribute . "' not defined.");
            }

            $calcFields[] = $attribute;
        }
    }

    if (!($owner->hasAttribute('isCalcValueSet'))) {
        throw Exception("This table is missing a field for isCalcValueSet");
    }

    parent::attach($owner);
}