web-dev-qa-db-ja.com

Yii2-不明なプロパティを取得しています: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

誰か助けてもらえますか?

7
Tareq Albajjaly

コンソールアプリケーションにはYii->$app->userがありません。したがって、config\console.phpuserコンポーネントを構成する必要があります。

のように、

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

あなたの問題についてのより多くの情報はこれを見てください: リンク

OR

次のリンクにアクセスしてください: Yii2 isGuestはコンソールアプリケーションで例外を与えます

注:コンソールアプリケーションにはセッションがありません。

14
GAMITG

\ 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にinitメソッドを追加します

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

cronログインを作成し、そのログインIDをこの構成で変数に渡すと、yii2の非難可能な動作が機能します

4
kurmi

@GAMITGが言ったように、設定ファイルでユーザーコンポーネントを設定する必要がありますが、残念ながら、セッションがコンソールで利用できないため、コンソールでセッションにアクセスできませんでした。多分あなたはこのような問題を解決することができます:

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