Yii2-получение неизвестного свойства: yii consoleApplication:: user


Я пытаюсь запустить контроллер консоли с терминала, но каждый раз получаю эту ошибку

Error: Getting unknown property: yiiconsoleApplication::user

Вот контроллер

class TestController extends yiiconsoleController {

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

И это конфигурация concole

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

Я попытался запустить его с помощью этих команд, но безуспешно

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

Кто-нибудь может помочь?

3 5

3 ответа:

Консольное приложение не имеет Yii->$app->user. Итак, вам нужно настроить компонент user в config\console.php.

Вроде как,

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

Подробнее о вашей проблеме смотрите здесь: ссылка

Или

Посетите следующую ссылку : Yii2 isGuest дает исключение в консольном приложении

Примечание: в консольном приложении нет сеанса.

Установить в \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 login и передайте этот логин id в переменную с этой конфигурацией ваше виноватое поведение yii2 будет работать

Как сказал @GAMITG, вы должны сконфигурировать пользовательский компонент в файле конфигурации, но, к сожалению, вы не смогли получить доступ к сеансу в консоли, потому что сеанс недоступен в консоли. Может быть, вы могли бы решить эту проблему следующим образом:

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