Unsupported configuration type: NULL

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
Zvook
Сообщения: 21
Зарегистрирован: 2013.03.06, 13:06

Unsupported configuration type: NULL

Сообщение Zvook »

Всем привет, столкнулся с очень странной ошибкой, не могу допереть почему я плохой лыжник:

Объявляю поведение в модели:

Код: Выделить всё

    public function behaviors()
    {
        $behaviors           = parent::behaviors();
        $behaviors['myBehavior'] = [
            'class' => MyBehavior::class,
            'innerModel' => InnerModel::class,
        ];

        return $behaviors;
    }
MyBehavior:

Код: Выделить всё

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);
		// А так работает
	}
}

zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Unsupported configuration type: NULL

Сообщение zelenin »

как пробуешь?

Zvook
Сообщения: 21
Зарегистрирован: 2013.03.06, 13:06

Re: Unsupported configuration type: NULL

Сообщение Zvook »

zelenin писал(а):
2018.03.02, 16:44
как пробуешь?
Как угодно, не работает никак :) Например так:

Код: Выделить всё

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
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Unsupported configuration type: NULL

Сообщение zelenin »

где, на какой стадии ты получаешь эти сообщения?

andku83
Сообщения: 988
Зарегистрирован: 2016.07.01, 10:24
Откуда: Харьков

Re: Unsupported configuration type: NULL

Сообщение andku83 »

а зачем return в методе init() ?

Zvook
Сообщения: 21
Зарегистрирован: 2013.03.06, 13:06

Re: Unsupported configuration type: NULL

Сообщение Zvook »

zelenin писал(а):
2018.03.02, 17:05
где, на какой стадии ты получаешь эти сообщения?
На любой. Если вставить этот код в init() - то на стадии инициализации бехавиора, если вставить в какой-нибудь event - то там. Например, можно поставить в ActiveRecord::EVENT_AFTER_INSERT, то триггернёт только после сохранения модели.
Вообще, отвечая на твой странный вопрос - "на стадии, когда непосредственно вызывается строка кода Yii::createObject($this->innerModel); И совершенно не важно где и в какой момент ее вызвывать - нигде внутри бехавиора она не работает.

zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Unsupported configuration type: NULL

Сообщение zelenin »

Zvook писал(а):
2018.03.02, 17:39
zelenin писал(а):
2018.03.02, 17:05
где, на какой стадии ты получаешь эти сообщения?
На любой. Если вставить этот код в init() - то на стадии инициализации бехавиора, если вставить в какой-нибудь event - то там. Например, можно поставить в ActiveRecord::EVENT_AFTER_INSERT, то триггернёт только после сохранения модели.
Вообще, отвечая на твой странный вопрос - "на стадии, когда непосредственно вызывается строка кода Yii::createObject($this->innerModel);
public function test() - вот ты указал функцию test в первом сообщении. Где ты ее вызываешь?
прекращай тупить

andku83
Сообщения: 988
Зарегистрирован: 2016.07.01, 10:24
Откуда: Харьков

Re: Unsupported configuration type: NULL

Сообщение andku83 »

а в следующем сообщении test() превратился в init() :)

Zvook
Сообщения: 21
Зарегистрирован: 2013.03.06, 13:06

Re: Unsupported configuration type: NULL

Сообщение Zvook »

zelenin писал(а):
2018.03.02, 17:42
Zvook писал(а):
2018.03.02, 17:39
zelenin писал(а):
2018.03.02, 17:05
где, на какой стадии ты получаешь эти сообщения?
На любой. Если вставить этот код в init() - то на стадии инициализации бехавиора, если вставить в какой-нибудь event - то там. Например, можно поставить в ActiveRecord::EVENT_AFTER_INSERT, то триггернёт только после сохранения модели.
Вообще, отвечая на твой странный вопрос - "на стадии, когда непосредственно вызывается строка кода Yii::createObject($this->innerModel);
public function test() - вот ты указал функцию test в первом сообщении. Где ты ее вызываешь?
прекращай тупить

Код: Выделить всё

namespace common\models;

use Yii;
use \yii\db\ActiveRecord;

class MyModel extends ActiveRecord
{
    public function behaviors()
    {
        $behaviors           = parent::behaviors();
        $behaviors['myBehavior'] = [
            'class' => MyBehavior::class,
            'innerModel' => InnerModel::class,
        ];

        return $behaviors;
    }
}

Код: Выделить всё

namespace common\models;

use Yii;
use \yii\db\ActiveRecord;

class InnerModel extends ActiveRecord
{
}

Код: Выделить всё

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);
		// А так работает
	}
}

Код: Выделить всё

public function actionIndex()
{
	$model = new MyModel();
	$model->save(); // <- падает здесь
}

andku83
Сообщения: 988
Зарегистрирован: 2016.07.01, 10:24
Откуда: Харьков

Re: Unsupported configuration type: NULL

Сообщение andku83 »

после добавления в ваш код не хватающих "use" у меня ваш код работает проверял с yii 2.0.13(14, 14.1)
возможно как-то связано с версией/настройкой PHP у вас

Ответить