当我从我的扩展程序运行迁移时(扩展程序在浏览网站时正常工作):
yii migrate --migrationPath=c:/wamp/www/mysite/vendor/author/extension_name/migration
我收到了以下错误:
Exception 'yii\base\InvalidConfigException' with message 'The configuration
for the "user" component must contain a "class" element.'
in C:\wamp\www\happychat\vendor\yiisoft\yii2\di\ServiceLocator.php:201
但我的user
组件配置通常是:
'user' => [
'identityClass' => 'author\user\models\AuthUser',
'enableAutoLogin' => true,
'loginUrl' => 'user/auth/login',
],
无论如何,这与迁移有什么关系?如果我删除此迁移有效,但我不想在每次要迁移时删除它。 我甚至尝试通过运行以下来迁移默认应用迁移:
yii migrate
并且出现与上述相同的错误。怎么解决?
更新: 添加堆栈跟踪:
#0 C:\wamp\www\happychat\vendor\yiisoft\yii2\di\ServiceLocator.php(257): yii\di\ServiceLocator->set('user', Array)
#1 C:\wamp\www\happychat\vendor\yiisoft\yii2\base\Component.php(168): yii\di\ServiceLocator->setComponents(Array)
#2 C:\wamp\www\happychat\vendor\yiisoft\yii2\BaseYii.php(518): yii\base\Component->__set('components', Array)
#3 C:\wamp\www\happychat\vendor\yiisoft\yii2\base\Object.php(105): yii\BaseYii::configure(Object(yii\console\Application), Array)
#4 C:\wamp\www\happychat\vendor\yiisoft\yii2\base\Application.php(201): yii\base\Object->__construct(Array)
#5 C:\wamp\www\happychat\vendor\yiisoft\yii2\console\Application.php(78): yii\base\Application->__construct(Array)
#6 C:\wamp\www\happychat\yii(29): yii\console\Application->__construct(Array)
#7 {main}
答案 0 :(得分:2)
我唯一能想到的是您碰巧在迁移代码中使用了Url或会话功能。不幸的是,没有完整的堆栈跟踪这很难说。也许您应该将其添加到您的问题中?如果我们能够看到它最终如何加载用户组件,它应该会使事情变得更加清晰。
仅供参考:Yii仅在核心组件的组件配置中自动添加class
- 属性。用户确实是这样定义的,但仅适用于基于web\Application
的应用程序。这就是为什么它在这种情况下正常工作。
修改:
感谢堆栈跟踪!这清除了事情。
跟踪表明在初始化期间发生错误。
这几乎只意味着一件事:您已将自定义user
配置添加到common\
文件夹下的配置文件中。
鉴于应用程序的common
和console
部分都使用web
,Yii正常工作但确实获得了无效配置。
只需将user
配置移动到frontend
下的配置文件(或任何包含您的Web可访问结构的文件夹),就可以解决问题。