компонент не загружается в yii2 basic

Я использую базовый шаблон yii2. Я пытаюсь создать базу данных RBAC, используя миграцию базы данных в yii2, я успешно создал несколько таблиц, и пока я создаю таблицы RBAC, у меня есть другая функция, как показано ниже:

protected function getAuthManager()
{
    $authManager = Yii::$app->getAuthManager();
    if (!$authManager instanceof DbManager) {
        throw new InvalidConfigException('You should configure "authManager" component to use database before executing this migration.');
    }
    return $authManager;
}

Эта функция не возвращает authManager, хотя я добавил это

'authManager'=>[
    'class'=>'yii\rbac\DbManager',
],`

в console.php

первые несколько строк ошибки:

Exception: You should configure "authManager" component to use database before executing this migration. (C:\xampp\htdocs\PMTool\migrations\m150820_064854_rbac.php:13)
 C:\xampp\htdocs\PMTool\migrations\m150820_064854_rbac.php(20): m150820_064854_rbac->getAuthManager()

код console.php

`<?php

Yii::setAlias('@tests', dirname(__DIR__) . '/tests');

$params = require(__DIR__ . '/params.php');
$db = require(__DIR__ . '/db.php');

return [
'id' => 'basic-console',
'basePath' => dirname(__DIR__),
'bootstrap' => ['log', 'gii'],
'controllerNamespace' => 'app\commands',
'modules' => [
    'gii' => 'yii\gii\Module',
],
'components' => [
    'cache' => [
        'class' => 'yii\caching\FileCache',
    ],
    'log' => [
        'targets' => [
            [
                'class' => 'yii\log\FileTarget',
                'levels' => ['error', 'warning'],
            ],
        ],
    ],
    'db' => $db,
    'authManager'=>[
        'class'=>'yii\rbac\DbManager',
    ],
],
'params' => $params,
];

person akhil    schedule 20.08.2015    source источник
comment
На всякий случай: вы добавили его под "components"? Здесь невозможно увидеть. (хотя я подозреваю, что Yii не запустится, если вы добавите его где-то еще)   -  person Blizz    schedule 20.08.2015
comment
'authManager'=>[ 'class'=>'yii\rbac\DbManager', ], добавить в web.php файл, раздел componets массива.   -  person GAMITG    schedule 20.08.2015
comment
да, я добавил его в компоненты @Blizz   -  person akhil    schedule 20.08.2015
comment
я добавил его в web.php и console.php, но на самом деле я работаю над миграцией в консоли, поэтому я думаю, что добавление этого в web.php не повлияет на решение этой проблемы. @gamitg   -  person akhil    schedule 20.08.2015
comment
@akhil, ты прав насчет web.php замечания, которое ничего не решает   -  person Blizz    schedule 20.08.2015
comment
покажите полный код console.php, пожалуйста   -  person scaisEdge    schedule 20.08.2015


Ответы (2)


Я решил проблему. Включив DbManager в класс миграции, как показано ниже.

use yii\rbac\DbManager;

person akhil    schedule 20.08.2015
comment
Хм, это не очень похоже на правильное решение. Вам не нужно изменять миграции Yii (или это одна из ваших собственных?) - person Blizz; 20.08.2015
comment
миграции мои собственные. Я их закодировал. Есть ли другой способ без включения DbManager - person akhil; 20.08.2015
comment
Хорошо, я думаю, теперь понял, посмотрим, поможет ли вам мой ответ. - person Blizz; 20.08.2015

Хорошо, с вашим ответом я понял: вы, вероятно, скопировали class из исходный сценарий переноса RBAC, но вы забыли включить use строки в начало файла, возможно ли это?

Поскольку use отсутствует, неизвестно, что на самом деле означает DbManager, поэтому getAuthManager() проверяет неизвестный класс, и условие не выполняется. Это также объясняет, почему проблема была решена путем добавления файла use yii\rbac\DbManager.

При этом правильный способ выполнить миграцию фреймворка — просто использовать параметр migrationPath:

./yii migrate --migrationPath=vendor/yiisoft/yii2/rbac/migrations

Я бы сказал, попробуйте это, и это вызовет у вас гораздо меньше проблем :)

person Blizz    schedule 20.08.2015
comment
Привет Близз. Могу ли я напрямую скопировать этот код ./yii migrate --migrationPath=vendor/yiisoft/yii2/rbac/migrations для запуска в моем терминале. Или я должен изменить любой код, такой как migrationPath - person Nana Partykar; 30.09.2015
comment
Нет, вы должны иметь возможность просто использовать его так, его основные функции - person Blizz; 30.09.2015