Php Yii::configure在模块init()中不起作用
我有一个模块调用API,我想为它加载配置文件。指南上说我必须使用function\Yii::configure。我使用它,但它不应用任何新配置。我试着用数组代替配置文件,结果是一样的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(); //
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();
}