Yii2 Не удалось создать экземпляр компонента или класса "db" - PullRequest
0 голосов
/ 30 декабря 2018

Я использую консольное приложение 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Когда я добавляю конфигурацию базы данных в 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

Ответы [ 2 ]

0 голосов
/ 27 мая 2019

Я обнаружил, что у меня возникла эта проблема, если я запускал yii напрямую из vendor / bin.Если я пошел в каталог консоли и запустил его оттуда с помощью ./yii, я не получил эту ошибку и смог создать миграцию.

Другими словами:

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

не работал

Но:

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

работал

0 голосов
/ 30 декабря 2018

Вам не хватает конфигураций компонентов базы данных для консольного приложения, вам нужно добавить следующее в файл config/console.php.Поскольку вы используете basic-app для Yii2, у вас должен быть файл 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, измените значения для username, password и dbname.

<?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',
        ]
    ]
];
...