Yii2 - 变得未知 属性: yii\console\Application::user

Yii2 - Getting unknown property: yii\console\Application::user

我正在尝试从终端 运行 控制台控制器,但我每次都收到此错误

Error: Getting unknown property: yii\console\Application::user

这里是控制器

class TestController extends \yii\console\Controller {

public function actionIndex() {
    echo 'this is console action';
} }

这是控制台配置

return [
'id' => 'app-console',
'basePath' => dirname(__DIR__),
'bootstrap' => ['log'],
'controllerNamespace' => 'console\controllers',
'modules' => [],
'components' => [
    'log' => [
        'targets' => [
            [
                'class' => 'yii\log\FileTarget',
                'levels' => ['error', 'warning'],
            ],
        ],
    ],
],
'params' => $params];

我试过 运行使用这些命令安装它,但没有成功

php yii test/index
php yii test
php ./yii test

有人可以帮忙吗?

控制台应用程序没有 Yii->$app->user。所以,你需要在config\console.php.

中配置user组件

喜欢,

config\console.php

 'components' => [
 .........
 ......
        'user' => [
            'class' => 'yii\web\User',
            'identityClass' => 'app\models\User',
            //'enableAutoLogin' => true,
        ],
        'session' => [ // for use session in console application
            'class' => 'yii\web\Session'
        ],
 .......
]

有关您的问题的更多信息,请参阅:Link

访问以下 link:

注意:控制台应用程序中没有会话。

设置在\console\config\main.php

return [
    'id' => 'app-console',
    'basePath' => dirname(__DIR__),
    'bootstrap' => ['log'],
    'controllerNamespace' => 'console\controllers',
    'components' => [
        'log' => [
            'targets' => [
                [
                    'class' => 'yii\log\FileTarget',
                    'levels' => ['error', 'warning'],
                ],
            ],
        ],
        'user' => [
            'class' => 'yii\web\User',
            'identityClass' => 'app\models\Credential',// class that implements IdentityInterface
        //'enableAutoLogin' => true,
        ],
    ],
    'params' => $params,
];

现在在您的 \console\controller\AbcController.php 添加初始化方法

 public function init() {
        parent::init();
        Yii::$app->user->setIdentity(Credential::findOne(['id'=><cronloginid>]));
    }

创建一个 cron 登录并使用此配置将登录 ID 传递给变量,yii2 的 Blameable Behavior 将起作用

正如@GAMITG 所说,您必须在配置文件中配置用户组件,但不幸的是,您无法在控制台中访问会话,那是因为会话在控制台中不可用。也许你可以这样解决问题:

$user_id = isset(Yii::$app->user->id) ? Yii::$app->user->id : 0;