Php Yii::configure在模块init()中不起作用

Php Yii::configure在模块init()中不起作用,php,yii2,Php,Yii2,我有一个模块调用API,我想为它加载配置文件。指南上说我必须使用function\Yii::configure。我使用它,但它不应用任何新配置。我试着用数组代替配置文件,结果是一样的 class API extends \yii\base\Module { public $controllerNamespace = 'api\client\controllers'; public function init() { parent::init(); //

我有一个模块调用API,我想为它加载配置文件。指南上说我必须使用function\Yii::configure。我使用它,但它不应用任何新配置。我试着用数组代替配置文件,结果是一样的

class API extends \yii\base\Module
{
    public $controllerNamespace = 'api\client\controllers';

    public function init()
    {
        parent::init();

//        \Yii::configure($this, require(__DIR__ . '/config/main.php'));

        \yii::configure($this, [
            'components' => [
                'user' => [
                    'class' => 'yii\web\UserTest',
                    'identityClass' => 'api\client\models\User',
                ],
            ]
        ]);

        echo \yii::$app->user->className();

        die();
    }
}

如何覆盖模块中的配置?

更新

您必须使用Yii::$app的setComponents方法

    Yii::$app->setComponents(
        [
            'errorHandler'=>[
                'errorAction'=>'forum/forum/error',
                'class'=>'yii\web\ErrorHandler',
            ],     
            'user' => [
                'class' => 'yii\web\User',
                'identityClass' => 'app\modules\profile\models\User',
            ],
        ]
    ); 
旧答案

它没有给你错误吗?你的大小写是错误的,所以用大写的“yii”代替小写的“yii”

class API extends \yii\base\Module
{
    public $controllerNamespace = 'api\client\controllers';

    public function init()
    {
        parent::init(); 

        \Yii::configure($this, [
            'components' => [
                'user' => [
                    'class' => 'yii\web\UserTest',
                    'identityClass' => 'api\client\models\User',
                ],
            ]
        ]);

        echo \Yii::$app->user->className();

        die();
    }
}

我认为没有理由在这里重写应用程序组件。我会使用@stefanomtagoo技巧,但将组件设置为模块本身,而不是
Yii::$app

public function init()
{
    parent::init();

    $this->setComponents([
        'db' => [
            'class' => 'yii2tech\filedb\Connection',
            'path' => '@app/builder/data',
        ]
    ]);
}
然后,棘手的部分是区分任何应用程序的组件和模块自己的组件。例如,如果我的模块有一个扩展模型,我会覆盖它的如下(原始代码):


因此,无论使用我的模块的应用程序是否有
db
组件,这都无关紧要。

你能做
var\u dump(\Yii::$app->user)吗查看发生了什么?基本上你想要你的身份类,不是吗?使用更新的答案'echo\Yii::$app->user->identity->className()`
var\u转储什么(\Yii::$app->user->identity)打印?你看到我上面的评论了吗?垃圾场是什么?哦!我的更改没有保存(现在才实现。请检查更新的帖子
public static function getDb()
{
    return Yii::$app->getModule('api')->get('db');
    // instead of: return Yii::$app->getDb();
}