voskobovich / yii2-many-to-many-behavior

This behavior soon will be DEPRECATED. See the link:

Home Page:https://github.com/voskobovich/yii2-linker-behavior

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Ошибка: 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.
Вообщем проблема исчезла как только композер заменил версии.
Спасибо, за вопрос

Какая версия поведения установлена?

Он меня натолкнул на мысль перейти на стабильную версию. Оказывается в апрельском проекте как раз и работает стабильная версия, а тут я решил попробовать все новое.