Yii2 - 获取未知属性:yii\console\Application :: user

Tar*_*aly 7 php console-application yii yii2 yii2-advanced-app

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

Error: Getting unknown property: yii\console\Application::user
Run Code Online (Sandbox Code Playgroud)

这是控制器

class TestController extends \yii\console\Controller {

public function actionIndex() {
    echo 'this is console action';
} }
Run Code Online (Sandbox Code Playgroud)

这是concole配置

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];
Run Code Online (Sandbox Code Playgroud)

我尝试使用这些命令运行它没有运气

php yii test/index
php yii test
php ./yii test
Run Code Online (Sandbox Code Playgroud)

有人可以帮忙吗?

GAM*_*ITG 14

控制台应用程序没有Yii->$app->user.因此,您需要配置user组件config\console.php.

像,

配置\ 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'
        ],
 .......
]
Run Code Online (Sandbox Code Playgroud)

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

要么

请访问以下链接: Yii2 isGuest在控制台应用程序中提供异常

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


小智 6

在\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,
];
Run Code Online (Sandbox Code Playgroud)

现在在你的 \console\controller\AbcController.php 添加 init 方法

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

创建一个 cron 登录并通过此配置将登录 ID 传递到变量中,您的 yii2 的可责行为将起作用