Yii2无法实例化组件或类“ db”

时间:2018-12-30 13:29:06

标签: yii2 migration

我使用Yii2控制台应用程序来运行迁移。这是一个非常基本的应用程序,它是这样的(项目的/文件夹中的yii.php):

<?php

    require __DIR__ . '/vendor/autoload.php';
    require __DIR__ . '/vendor/yiisoft/yii2/Yii.php';
    $config = require __DIR__ . '/config/console.php';

    (new yii\console\Application($config))->run();

?>

所以当我跑步

php yii.php

一切都很好,但是当我跑步时

php yii.php migrate/create create_user_table

我收到一条错误消息:

Error: Failed to instantiate component or class "db".

我的Yii是v2.0.15.1

UPD 19:32 30/12/2018 当我像这样将db配置添加到config / console.php时:

    return [
    'id' => 'school-console',
    'basePath' => dirname(__DIR__),
    'db' => [
              'class' => 'yii\db\Connection',
              'dsn' => 'mysql:host=localhost;dbname=school',
              'username' => 'root',
              'password' => 'Taras1love',
              'charset' => 'utf8',
    ]
];

我明白了:

Error: Setting read-only property: yii\console\Application::db

3 个答案:

答案 0 :(得分:1)

您缺少控制台应用程序的数据库组件配置,需要在config/console.php文件内添加以下内容。当您使用Yii2的basic-app时,您必须具有数据库配置的db.php文件,您需要像下面这样包含它

//this goes on the top of your `console.php` file 
$db = require __DIR__ . '/db.php',

return [
    'id' => 'myapp-console', 
    'basePath' => dirname(__DIR__)
    //add the db component
    'components' => [
        'db' => $db,
    ]
];

您的db.php应该像下面的config文件夹中一样,更改usernamepassworddbname的值。

<?php

return [
    'class' => 'yii\db\Connection',
    'dsn' => 'mysql:host=localhost;dbname=YOUR_DB_NAME',
    'username' => 'DB_USER',
    'password' => 'DB_PASS',
    'charset' => 'utf8',
];

,或者如果您不想创建单独的文件,也可以在config/console.php内分配它

return [
    'id' => 'myapp-console', 
    'basePath' => dirname(__DIR__)
    //add the db component
    'components' => [
        'db' => [
           'class' => 'yii\db\Connection',
           'dsn' => 'mysql:host=localhost;dbname=YOUR_DB_NAME',
           'username' => 'DB_USER',
           'password' => 'DB_PASS',
           'charset' => 'utf8',
        ]
    ]
];

答案 1 :(得分:0)

我发现如果我直接从供应商/ bin处运行yii,则会遇到此问题。 如果我进入控制台目录并使用./yii从那里运行它,则不会出现此错误,并且能够创建迁移。

换句话说:

cd <project-root>/vendor/bin
yii migrate/create xxx

没用

但是:

cd <project-root>/console
./yii migrate/create xxx

工作

答案 2 :(得分:0)

发生这种情况是因为我不小心重命名了迁移文件,但它与文件名不匹配