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 ответа:
Консольное приложение не имеет
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;