Ошибка: Unsupported configuration type: object
mazurva opened this issue · comments
При попытке запуска вываливается ошибка:
Модель:
/**
* @inheritdoc
*/
public function rules()
{
return [
[['category_ids'], 'each', 'rule' => ['integer']],
...
...
...
public function behaviors()
{
return ArrayHelper::merge(parent::behaviors(),
[
'manytomany'=>[
'class' => \voskobovich\behaviors\ManyToManyBehavior::className(),
'relations' => [
'category_ids' => [
'categories',
'default' => NewsCategory::find()->one()->id,
]
],
],
]);
}
/**
* @return \yii\db\ActiveQuery
*/
public function getCategories()
{
return $this->hasMany(NewsCategory::className(), ['id' => 'news_category_id'])->viaTable('{{%news_category_has_news}}', ['news_id' => 'id']);
}
Представление:
<?= $form->field($model, 'category_ids')->widget(\kartik\select2\Select2::className(), [
'data'=>\app\modules\news\models\NewsCategory::listAll(),
'options' => [
'placeholder' => 'Выберите категорию',
'multiple' => true,
],
'addon' => [
'prepend' => [
'content' => \kartik\icons\Icon::show('indent')
]
]
]) ?>
Краткий листинг ошибки:
1. in /var/www/vendor/yiisoft/yii2/BaseYii.php at line 350
} elseif (is_array($type) && isset($type['class'])) {
$class = $type['class'];
unset($type['class']);
return static::$container->get($class, $params, $type);
} elseif (is_callable($type, true)) {
return static::$container->invoke($type, $params);
} elseif (is_array($type)) {
throw new InvalidConfigException('Object configuration must be an array containing a "class" element.');
} else {
throw new InvalidConfigException('Unsupported configuration type: ' . gettype($type));
}
}
private static $_logger;
/**
* @return Logger message logger
*/
public static function getLogger()
2. in /var/www/vendor/voskobovich/yii2-many-many-behavior/src/ManyToManyBehavior.php at line 503 – yii\BaseYii::createObject(app\modules\news\models\NewsCategory)
} else {
/** @var ActiveRecord $owner */
$owner = $this->owner;
$relation = $owner->getRelation($relationName);
/** @var ActiveRecord $foreignModel */
$foreignModel = Yii::createObject($relation->modelClass);
$value = $relation->select($foreignModel->getPrimaryKey())->column();
}
if (empty($fieldParams['get'])) {
return $value;
}
3. in /var/www/vendor/yiisoft/yii2/base/Component.php at line 136 – voskobovich\behaviors\ManyToManyBehavior::__get('category_ids')
4. in /var/www/vendor/yiisoft/yii2/db/BaseActiveRecord.php at line 252 – yii\base\Component::__get('category_ids')
5. in /var/www/vendor/yiisoft/yii2/helpers/BaseHtml.php at line 2033 – yii\db\BaseActiveRecord::__get('category_ids')
6. in /var/www/vendor/kartik-v/yii2-krajee-base/InputWidget.php at line 172 – yii\helpers\BaseHtml::getAttributeValue(app\modules\news\models\News, 'category_ids')
Ошибка появилась не так давно, потому что это второй проект с этой библиотекой, первый нормально работает. Может это где то я накосячил? Возможно у меня глаз уже замылился, но я не могу найти ошибку.
А почему решили что в моем поведении ошибка?
Какая версия поведения установлена?
Попробуйде закомментировать виджеты Картика во вьюхе. Ошибка останется?
Так же попробуйте записать видео с экрана, где будет видно, что ошибка 100% в конфигурации поведения а так же будет виден весь лог ошибки (там важны первые цветные блоки в начале лога).
Так же в вашем случае лучше для получения значения default использовать каллбек
https://github.com/voskobovich/yii2-many-to-many-behavior/blob/master/src/ManyToManyBehavior.php#L305
Решил проблему. Выставил в композере стабильную версию и все заработало, при записи я указал "voskobovich/yii2-many-many-behavior": "^3.2",
и у меня оказалась версия v3.3.0-dev
.
Вообщем проблема исчезла как только композер заменил версии.
Спасибо, за вопрос
Какая версия поведения установлена?
Он меня натолкнул на мысль перейти на стабильную версию. Оказывается в апрельском проекте как раз и работает стабильная версия, а тут я решил попробовать все новое.