class MyBehavior extends yii\base\Behavior
{
public $innerModel;
public function test()
{
return Yii::createObject($this->innerModel);
// Получаю Unsupported configuration type: NULL
return new $this->innerModel;
// Получаю Class name must be a valid object or a string
var_dump($this->innerModel);
// Получаю верный НС существующего класса
return Yii::createObject(InnerModel::class);
// А так работает
}
}
class MyBehavior extends yii\base\Behavior
{
public $innerModel;
public function init() {
return Yii::createObject($this->innerModel);
// Получаю Unsupported configuration type: NULL
return new $this->innerModel;
// Получаю Class name must be a valid object or a string
var_dump($this->innerModel);
// Получаю верный НС существующего класса
return Yii::createObject(InnerModel::class);
// А так работает
}
}
zelenin писал(а): ↑2018.03.02, 17:05
где, на какой стадии ты получаешь эти сообщения?
На любой. Если вставить этот код в init() - то на стадии инициализации бехавиора, если вставить в какой-нибудь event - то там. Например, можно поставить в ActiveRecord::EVENT_AFTER_INSERT, то триггернёт только после сохранения модели.
Вообще, отвечая на твой странный вопрос - "на стадии, когда непосредственно вызывается строка кода Yii::createObject($this->innerModel); И совершенно не важно где и в какой момент ее вызвывать - нигде внутри бехавиора она не работает.
zelenin писал(а): ↑2018.03.02, 17:05
где, на какой стадии ты получаешь эти сообщения?
На любой. Если вставить этот код в init() - то на стадии инициализации бехавиора, если вставить в какой-нибудь event - то там. Например, можно поставить в ActiveRecord::EVENT_AFTER_INSERT, то триггернёт только после сохранения модели.
Вообще, отвечая на твой странный вопрос - "на стадии, когда непосредственно вызывается строка кода Yii::createObject($this->innerModel);
public function test() - вот ты указал функцию test в первом сообщении. Где ты ее вызываешь?
прекращай тупить
zelenin писал(а): ↑2018.03.02, 17:05
где, на какой стадии ты получаешь эти сообщения?
На любой. Если вставить этот код в init() - то на стадии инициализации бехавиора, если вставить в какой-нибудь event - то там. Например, можно поставить в ActiveRecord::EVENT_AFTER_INSERT, то триггернёт только после сохранения модели.
Вообще, отвечая на твой странный вопрос - "на стадии, когда непосредственно вызывается строка кода Yii::createObject($this->innerModel);
public function test() - вот ты указал функцию test в первом сообщении. Где ты ее вызываешь?
прекращай тупить
namespace common\behaviors;
use Yii;
use yii\base\Behavior;
class MyBehavior extends Behavior
{
public $innerModel;
/**
* @inheritdoc
*/
public function events()
{
return [
ActiveRecord::EVENT_AFTER_INSERT => 'test',
ActiveRecord::EVENT_AFTER_UPDATE => 'test',
];
}
public function test()
{
$inner = Yii::createObject($this->innerModel);
// Получаю Unsupported configuration type: NULL
$inner = new $this->innerModel;
// Получаю Class name must be a valid object or a string
var_dump($this->innerModel);
// Получаю верный НС существующего класса
$inner = Yii::createObject(InnerModel::class);
// А так работает
}
}
после добавления в ваш код не хватающих "use" у меня ваш код работает проверял с yii 2.0.13(14, 14.1)
возможно как-то связано с версией/настройкой PHP у вас