【问题标题】:component is not getting loaded in yii2 basic组件未在 yii2 basic 中加载
【发布时间】:2015-08-20 07:40:51
【问题描述】:

我正在使用 yii2 基本模板。我正在尝试使用 yii2 中的数据库迁移创建 RBAC DB,我已经成功创建了几个表,并且在创建 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',
],`

在控制台.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,
];

【问题讨论】:

  • 只是为了确定:您是否将其添加到 "components" 下?不可能在这里看到。 (虽然我怀疑Yii 如果你在其他地方添加它就不会启动)
  • 'authManager'=&gt;[ 'class'=&gt;'yii\rbac\DbManager', ], 添加web.php 文件,componets 数组的部分。
  • 是的,我已经在组件@Blizz 下添加了它
  • 我已经在 web.php 和 console.php 中添加了它,但实际上我正在控制台中进行迁移,所以我认为在 web.php 中添加它不会对解决这个问题产生影响。@游戏
  • @akhil 你是对的 web.php 评论没有解决任何问题

标签: yii2 yii-components


【解决方案1】:

我已经解决了这个问题。通过在迁移类中包含 DbManager,如下所示

use yii\rbac\DbManager;

【讨论】:

  • 嗯,这似乎不是一个正确的解决方案。你不应该修改 Yii 的迁移(或者它是你自己的迁移?)
  • 迁移是我自己的。我已经对它们进行了编码。不包括 DbManager 有没有其他方法
  • 好的,我想我现在明白了,看看我的回答是否对你有帮助。
【解决方案2】:

好的,您的回答我明白了:您可能复制了original RBAC migration scriptclass,但忘记在文件顶部包含use 行,这可能吗?

由于缺少use,因此不知道DbManager 的实际含义,因此getAuthManager() 检查未知类并且条件失败。 这也解释了为什么通过添加use yii\rbac\DbManager 解决了问题。

话虽如此,运行框架迁移的正确方法是简单地使用migrationPath 选项:

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

我会说,尝试一下,它会给你带来的问题会少很多:)

【讨论】:

  • 嗨暴雪。我可以直接复制这段代码“./yii migrate --migrationPath=vendor/yiisoft/yii2/rbac/migrations”在我的终端中运行吗?或者,我必须更改任何代码,例如 migrationPath
  • 不,你应该可以这样使用它,它的基本功能
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-27
相关资源
最近更新 更多