9

我试图从终端运行控制台控制器,但每次都会出现此错误

错误:获取未知属性:yii\console\Application::user

这是控制器

类TestController extends\yii\console\Controller{公共函数actionIndex(){echo“这是控制台操作”;} }

这是康科莱配置

返回[“id”=>“应用程序控制台”,“basePath”=>目录名(__DIR__),'bootstrap'=>['log'],“controllerNamespace”=>“console\controllers”,“模块”=>[],“组件”=>[“日志”=>[“目标”=>[[“class”=>“yii\log\FileTarget”,'levels'=>['error','warning'],],],],],'params'=>$params];

我试着用这些命令运行它,但没有成功

php-yii测试/索引php-yii测试电话/yii试验

有人能帮忙吗?

  • 一旦你使用“测试”,有时也使用“文本”。这可能是问题所在吗? 评论 2015年12月9日9:53
  • 测试控制器你应该使用php-yii测试/索引并显示错误的完整堆栈跟踪。 评论 2015年12月9日9:58
  • 不,实际上只是一个问题,这是测试 评论 2015年12月9日10:41

3个答案

重置为默认值
18

控制台应用程序没有易->$app->用户。因此,您需要配置用户中的组件配置\控制台.php.

比如,

配置\控制台.php

“组件”=>[...............“用户”=>[“class”=>“yii\web\User”,“identityClass”=>“app\models\User”,//“enableAutoLogin”=>true,],“session”=>[/用于控制台应用程序中的session“class”=>“yii\web\Session”],.......]

有关您问题的更多信息,请参阅:链接

访问以下链接:Yii2是Guest在控制台应用程序中给出异常

注:控制台应用程序中没有会话。

10
  • 很好,感谢它解决了用户错误,但现在出现了会话错误yii\console\Application::getSession(),我试图删除它,因为console中没有会话,但仍然出现相同的错误。有什么主意吗? 评论 2015年12月9日10:57
  • 你能检查一下吗链接?
    – 加米特
    评论 2015年12月9日11:22
  • 事实上,我有相同的配置,但仍然会出现会话错误 评论 2015年12月9日11:24
  • 您想删除控制台中的会话吗?如果是,只需移除阶段组件来自组件数组。
    – 加米特
    评论 2015年12月9日11:26
  • 好吧,我不需要控制台中的会话,我试图从配置中删除它,但仍然收到相同的错误。 评论 2015年12月9日11:32
6

在\console\config\main.php中设置

返回[“id”=>“应用控制台”,“basePath”=>目录名(__DIR__),'bootstrap'=>['log'],“controllerNamespace”=>“console\controllers”,“组件”=>[“日志”=>[“目标”=>[[“class”=>“yii\log\FileTarget”,“级别”=>['error','warning'],],],],“用户”=>[“class”=>“yii\web\User”,“identityClass”=>“app\models\Credential”,//实现IdentityInterface的类//“enableAutoLogin”=>true,],],“params”=>$params,];

现在在您的\console\controller\AbcController.php中添加init方法

公共函数init(){父项::init();Yi::$app->user->setIdentity(凭证::findOne(['id'=><cronloginid>]));}

创建一个cron登录名,并在变量中传递该登录id,使用此配置,yii2的可指责行为将起作用

1
  • 有点过时,但效果很好!我正在编写一个控制台命令,将数据导入应用程序,我想使用现有的模型来进行验证和插入,但这些模型需要知道哪个用户帐户正在执行操作。我需要在控制台中模拟“无会话”登录,以便所有模型都具有Yii::$app->user->identity的范围。谢谢!
    – 塔诺罗
    评论 2021年12月28日17:38
1

正如@GAMITG所说,您必须在配置文件中配置用户组件,但不幸的是,您无法访问控制台中的会话,这是因为会话在控制台中不可用。也许你可以这样解决这个问题:

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

你的答案

单击“发布您的答案”,表示您同意我们的服务条款并确认您已阅读我们的隐私政策.