Yii2-获取未知属性:yii\coconsole\Request::userAgent和Class db不存在



我对Yii2框架版本2.0.42.1有问题,该版本包含一个Yii2高级应用程序模板项目。

当我运行yii-php脚本时:php yii

它返回以下错误:

Exception 'yiibaseUnknownPropertyException' with message 'Getting unknown property: yiiconsoleRequest::userAgent'
in /usr/src/app/vendor/yiisoft/yii2/base/Component.php:155
Stack trace:
#0 /usr/src/app/common/components/VerificationNavigateur.php(23): yiibaseComponent->__get('userAgent')
#1 /usr/src/app/vendor/yiisoft/yii2/base/BaseObject.php(109): commoncomponentsVerificationNavigateur->init()
#2 /usr/src/app/common/components/AppBootstrap.php(20): yiibaseBaseObject->__construct()
#3 /usr/src/app/vendor/yiisoft/yii2/base/Application.php(333): commoncomponentsAppBootstrap->bootstrap(Object(yiiconsoleApplication))
#4 /usr/src/app/vendor/yiisoft/yii2/base/Application.php(279): yiibaseApplication->bootstrap()
#5 /usr/src/app/vendor/yiisoft/yii2/console/Application.php(125): yiibaseApplication->init()
#6 /usr/src/app/vendor/yiisoft/yii2/base/BaseObject.php(109): yiiconsoleApplication->init()
#7 /usr/src/app/vendor/yiisoft/yii2/base/Application.php(212): yiibaseBaseObject->__construct(Array)
#8 /usr/src/app/vendor/yiisoft/yii2/console/Application.php(90): yiibaseApplication->__construct(Array)
#9 /usr/src/app/yii(22): yiiconsoleApplication->__construct(Array)

在我运行composer install之前一切都很好。

即使我尝试降级框架composer require yiisoft/yii2:2.0.41,也不会改变任何事情。

当我尝试从供应商文件夹运行php脚本时,一切都很好php vendor/bin/yii

但当我尝试运行迁移php vendor/bin/yii migrate时,会出现以下错误:

Yii Migration Tool (based on Yii v2.0.42.1)
Exception 'yiidiNotInstantiableException' with message 'Failed to instantiate component or class "db".'
in /usr/src/app/vendor/yiisoft/yii2/di/Container.php:510
Caused by: Exception 'ReflectionException' with message 'Class db does not exist'
in /usr/src/app/vendor/yiisoft/yii2/di/Container.php:508
Stack trace:
#0 /usr/src/app/vendor/yiisoft/yii2/di/Container.php(508): ReflectionClass->__construct('db')
#1 /usr/src/app/vendor/yiisoft/yii2/di/Container.php(386): yiidiContainer->getDependencies('db')
#2 /usr/src/app/vendor/yiisoft/yii2/di/Container.php(171): yiidiContainer->build('db', Array, Array)
#3 /usr/src/app/vendor/yiisoft/yii2/di/Instance.php(176): yiidiContainer->get('db')
#4 /usr/src/app/vendor/yiisoft/yii2/di/Instance.php(145): yiidiInstance->get(NULL)
#5 /usr/src/app/vendor/yiisoft/yii2/console/controllers/MigrateController.php(183): yiidiInstance::ensure(Object(yiidiInstance), 'yii\db\Connecti...')
#6 /usr/src/app/vendor/yiisoft/yii2/base/Controller.php(179): yiiconsolecontrollersMigrateController->beforeAction(Object(yiibaseInlineAction))
#7 /usr/src/app/vendor/yiisoft/yii2/console/Controller.php(184): yiibaseController->runAction('up', Array)
#8 /usr/src/app/vendor/yiisoft/yii2/base/Module.php(534): yiiconsoleController->runAction('up', Array)
#9 /usr/src/app/vendor/yiisoft/yii2/console/Application.php(181): yiibaseModule->runAction('migrate/up', Array)
#10 /usr/src/app/vendor/yiisoft/yii2/console/Application.php(148): yiiconsoleApplication->runAction('migrate/up', Array)
#11 /usr/src/app/vendor/yiisoft/yii2/base/Application.php(392): yiiconsoleApplication->handleRequest(Object(yiiconsoleRequest))
#12 /usr/src/app/vendor/yiisoft/yii2/yii(37): yiibaseApplication->run()
#13 {main}

我的数据库配置连接文件没有更改,common/config/main-local.php:

<?php
return [
'components' => [
'db' => [
'class' => 'yiidbConnection',
'dsn' => 'pgsql:host=172.21.0.3;dbname=dev',
'username' => 'dev',
'password' => 'dev',
'charset' => 'utf8',
],
...

PHP版本:7.4

Linux发行版:Ubuntu 20.04

Yii2论坛现在需要维护一段时间。

问题出在这个组件commoncomponentsVerificationNavigateur中。

您正在使用init()方法访问Yii::$app->request->userAgent。此属性仅在yiiwebRequest中可用。在您的应用程序中,组件commoncomponentsVerificationNavigateur甚至可用于控制台应用程序。但在这种情况下,属性Yii::$app->request包含不具有属性userAgentyiiconsoleRequest的实例。

如果你的控制台应用程序中不需要该组件,你应该在控制台配置中删除它。如果您在控制台应用程序中需要该组件,则应修改其init()方法,以在访问userAgent属性之前检查Yii::$app->request是否为yiiwebRequest的实例,例如:

if (Yii::$app->request instanceof yiiwebRequest) {
// ... do something with Yii::$app->request->userAgent
}

如果是php vendor/bin/yii,则不使用您的应用程序配置。这就是为什么该组件没有被引导,并且您不会遇到该错误。但是,由于未加载配置,因此db组件没有配置,迁移也无法进行。

最新更新