ターミナルからコンソールコントローラーを実行しようとしていますが、毎回このエラーが発生します
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
がありません。したがって、config\console.php
でuser
コンポーネントを構成する必要があります。
のように、
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はコンソールアプリケーションで例外を与えます
注:コンソールアプリケーションにはセッションがありません。
\ 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の非難可能な動作が機能します
@GAMITGが言ったように、設定ファイルでユーザーコンポーネントを設定する必要がありますが、残念ながら、セッションがコンソールで利用できないため、コンソールでセッションにアクセスできませんでした。多分あなたはこのような問題を解決することができます:
$user_id = isset(Yii::$app->user->id) ? Yii::$app->user->id : 0;