我有一个模块调用API,我想为它加载配置文件。指南说我必须使用函数\ 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();
}
}
我如何覆盖模块中的配置?
答案 0 :(得分:2)
<强>更新强>
你必须使用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',
],
]
);
OLD ANSWER
它没有给你错误吗?你的外壳是错误的,而不是&#34; yii&#34;用小写字母使用&#34; Yii&#34;大写
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();
}
}
答案 1 :(得分:0)
我认为没有理由在此处覆盖应用程序组件。我使用@StefanoMtangoo技巧但是将组件设置为模块本身而不是Yii::$app
:
public function init()
{
parent::init();
$this->setComponents([
'db' => [
'class' => 'yii2tech\filedb\Connection',
'path' => '@app/builder/data',
]
]);
}
然后,棘手的部分是区分任何应用程序的组件和模块自己的组件。例如,如果我的模块的模型扩展为http://symfony.com/doc/current/doctrine/associations.html,我会覆盖其yii\db\ActiveRecord,如下所示(原始代码getDB()):
public static function getDb()
{
return Yii::$app->getModule('api')->get('db');
// instead of: return Yii::$app->getDb();
}
因此,无论使用我的模块的应用程序是否具有db
组件,都无关紧要。