在Yii2中运行多个应用程序时,无法获得自定义控制台命令


Having issue getting custom console commands to work in Yii2 whilst running multiple applications

我正在运行Yii2,并使用以下目录结构设置了几个不同的应用程序…

admin/
    system/
        controllers/
        models/
        views/
    index.php
common/
    vendor/
    .bowerrc
    composer.json
    composer.lock
console/
    config/
    controllers/
    yii
    yii.bat
css/
images/
js/
system/
    controllers/
    models/
    views/
index.php

我刚刚尝试运行我的第一个自定义控制台命令,但我一直得到错误:

错误:Unknown command "data/install-timezones".

我的控制器:

namespace console'controllers;
use Yii;
use yii'web'Controller;
use console'models'Timezones;
class DataController extends Controller {
    public function actionInsertTimezones() {
        echo 'testing';
    }
}

我的console/config/main.php文件:

Yii::setAlias('@tests', dirname(__DIR__) . '/tests');
$params = require(__DIR__ . '/../../common/config/params.php');
$db = require(__DIR__ . '/../../common/config/db.php');
return [
    'id' => 'basic-console',
    'basePath' => dirname(__DIR__),
    'bootstrap' => ['log', 'gii'],
    'controllerNamespace' => 'console'controllers',
    'modules' => [
        'gii' => 'yii'gii'Module',
    ],
    'components' => [
        'cache' => [
            'class' => 'yii'caching'FileCache',
        ],
        'authManager' => [
            'class' => 'yii'rbac'DbManager',
        ],      
        'log' => [
            'traceLevel' => YII_DEBUG ? 3 : 0,
            'targets' => [
                [
                    'class' => 'yii'log'FileTarget',
                    'levels' => ['error'],
                    'logFile' => '@app/runtime/logs/errors.log',
                ],
                [
                    'class' => 'yii'log'FileTarget',
                    'levels' => ['warning'],
                    'logFile' => '@app/runtime/logs/warnings.log',
                ],
                [
                    'class' => 'yii'log'FileTarget',
                    'levels' => ['info'],
                    'logFile' => '@app/runtime/logs/info.log',
                    'enabled' => false,
                ],
                [
                    'class' => 'yii'log'FileTarget',
                    'levels' => ['trace'],
                    'logFile' => '@app/runtime/logs/trace.log',
                    'enabled' => false,
                ],              
            ],
        ],
        'i18n' => [
            'translations' => [         
                '*' => [
                    'class' => 'yii'i18n'PhpMessageSource',
                    'basePath' => '@common/languages',
                ],
            ],
        ],      
        'db' => $db,
    ],
    'params' => $params,
];

知道是什么问题吗?

我想你只是用错了控制器:

namespace console'controllers;
use Yii;
use yii'console'Controller; // <--- not yii'web'Controller
use console'models'Timezones;
class DataController extends Controller {
    public function actionInsertTimezones() {
        echo 'testing';
    }
}

并尝试用这个命令:yii data/insert-timezone,因为data/install-timezones真的没有定义。

什么深夜节目?: -)