Я пытаюсь запустить консольный контроллер с терминала, но я получаю эти ошибки каждый раз
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
. Итак, вам нужно настроить 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 и передайте этот идентификатор входа в переменной с этой конфигурацией, ваше поведение Blameable yii2 будет работать
Как сказал @GAMITG, вы должны настроить пользовательский компонент в файле конфигурации, но, к сожалению, вы не можете получить доступ к сеансу в консоли, потому что сеанс недоступен в консоли. Возможно, вы могли бы решить проблему следующим образом:
$user_id = isset(Yii::$app->user->id) ? Yii::$app->user->id : 0;