UnknownPropertyException в Yii2 RBAC с конфигурацией пользовательского модуля yii2

Я получаю следующую ошибку при настройке модуля yii2 в расширенном шаблоне:

exception 'yii\base\UnknownPropertyException' with message 'Getting 

unknown property: common\models\User::status' in D:\Programes instal.lats\xampp\htdocs\yiitester\vendor\yiisoft\yii2\base\Component.php:143
Stack trace:
#0 D:\Programes instal.lats\xampp\htdocs\yiitester\vendor\yiisoft\yii2\db\BaseActiveRecord.php(246): yii\base\Component->__get('status')
#1 D:\Programes instal.lats\xampp\htdocs\yiitester\vendor\yiisoft\yii2\validators\DefaultValueValidator.php(46): yii\db\BaseActiveRecord->__get('status')
#2 D:\Programes instal.lats\xampp\htdocs\yiitester\vendor\yiisoft\yii2\validators\Validator.php(238): yii\validators\DefaultValueValidator->validateAttribute(Object(common\models\User), 'status')
#3 D:\Programes instal.lats\xampp\htdocs\yiitester\vendor\yiisoft\yii2\base\Model.php(333): yii\validators\Validator->validateAttributes(Object(common\models\User), Array)
#4 D:\Programes instal.lats\xampp\htdocs\yiitester\vendor\yiisoft\yii2\db\ActiveRecord.php(416): yii\base\Model->validate(NULL)
#5 D:\Programes instal.lats\xampp\htdocs\yiitester\vendor\yiisoft\yii2\db\BaseActiveRecord.php(582): yii\db\ActiveRecord->insert(true, NULL)
#6 D:\Programes instal.lats\xampp\htdocs\yiitester\frontend\models\SignupForm.php(51): yii\db\BaseActiveRecord->save()
#7 D:\Programes instal.lats\xampp\htdocs\yiitester\frontend\controllers\SiteController.php(123): frontend\models\SignupForm->signup()
#8 [internal function]: frontend\controllers\SiteController->actionSignup()
#9 D:\Programes instal.lats\xampp\htdocs\yiitester\vendor\yiisoft\yii2\base\InlineAction.php(55): call_user_func_array(Array, Array)
#10 D:\Programes instal.lats\xampp\htdocs\yiitester\vendor\yiisoft\yii2\base\Controller.php(151): yii\base\InlineAction->runWithParams(Array)
#11 D:\Programes instal.lats\xampp\htdocs\yiitester\vendor\yiisoft\yii2\base\Module.php(455): yii\base\Controller->runAction('signup', Array)
#12 D:\Programes instal.lats\xampp\htdocs\yiitester\vendor\yiisoft\yii2\web\Application.php(83): yii\base\Module->runAction('site/signup', Array)
#13 D:\Programes instal.lats\xampp\htdocs\yiitester\vendor\yiisoft\yii2\base\Application.php(375): yii\web\Application->handleRequest(Object(yii\web\Request))
#14 D:\Programes instal.lats\xampp\htdocs\yiitester\frontend\web\index.php(18): yii\base\Application->run()
#15 {main}

Я следовал этим инструкциям:

https://github.com/dektrium/yii2-user/blob/master/docs/getting-started.md

https://github.com/dektrium/yii2-user/blob/master/docs/usage-with-advanced-template.md

Установлено с композитором:

composer require "dektrium/yii2-user:0.9.*@dev"

И отредактировал необходимые файлы:

общий / конфигурация / main.php:

<?php
return [
    'vendorPath' => dirname(dirname(__DIR__)) . '/vendor',
    'modules' => [
        'user' => [
            'class' => 'dektrium\user\Module',
            // you will configure your module inside this file
            // or if need different configuration for frontend and backend you may
            // configure in needed configs
        ],
    ],
    'components' => [
        'cache' => [
            'class' => 'yii\caching\FileCache',
        ],
        'authManager' => [
            'class' => 'yii\rbac\DbManager',
            'defaultRoles' => ['guest'],
        ],
    ],
];

интерфейс / конфигурации / main.php

    <?php
$params = array_merge(
    require(__DIR__ . '/../../common/config/params.php'),
    require(__DIR__ . '/../../common/config/params-local.php'),
    require(__DIR__ . '/params.php'),
    require(__DIR__ . '/params-local.php')
);

return [
    'id' => 'app-frontend',
    'basePath' => dirname(__DIR__),
    'bootstrap' => ['log'],
    'controllerNamespace' => 'frontend\controllers',
    'modules' => [
        'user' => [
            // following line will restrict access to admin page
            'as frontend' => 'dektrium\user\filters\FrontendFilter',
        ],
    ],
    'components' => [
        'log' => [
            'traceLevel' => YII_DEBUG ? 3 : 0,
            'targets' => [
                [
                    'class' => 'yii\log\FileTarget',
                    'levels' => ['error', 'warning'],
                ],
            ],
        ],
        'errorHandler' => [
            'errorAction' => 'site/error',
        ], 
    ],

    'params' => $params,
];

Я новичок в yii2-user и rbac.

5 ответов

Вы можете использовать эту команду для запуска миграции:

php yii migrate/up --migrationPath=@vendor/dektrium/yii2-user/migrations

Вам нужно бежать yii migrate команда.

Начиная с версии 2.0.12, вы также можете указать массив путей миграции, которые нужно искать для загрузки миграций.

в конфигурации консоли вы можете добавить:

      'controllerMap' => [
    'migrate' => [
        'class' => MigrateController::class,
        'migrationPath' => [
            '@app/migrations',
            '@vendor/dektrium/yii2-user/migrations'
        ],
        'migrationNamespaces' => [
        ],
    ],
]

если вы запустите

php yii миграция / вверх

тогда @ vendor / dektrium / yii2-user / migrations будет постоянно включаться.

преимущество в том, что вы не столкнетесь с ошибкой, если одно из обновлений идет с миграцией.

Вам нужно добавить столбец статуса в вашу пользовательскую таблицу, как показано ниже:

изменить таблицу добавить пользователя status smallint(6) NOT NULL ПО УМОЛЧАНИЮ '10'

Похоже, вы пропустили третью часть установки dektrium/yii2-userпакет. И это применение миграции, которая идет в комплекте. Выполняя эти миграции, вы гарантируете, что в вашей базе данных будут таблицы, необходимые для правильной работы пакета. Некоторые из нихuser таблица например.

Это то, что вы пропустили из руководства по установке:

3. Обновите схему базы данных.

Последнее, что вам нужно сделать, это обновить схему базы данных, применив миграции. Убедитесь, что вы правильно настроили компонент приложения db, и выполните следующую команду:

$ php yii migrate / up --migrationPath=@vendor / dektrium / yii2-user / migrations

Смотри сюда

Другие вопросы по тегам