在行为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);
}