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

时间:2014-10-24 05:36:41

标签: php yii2

我有一个模块调用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();
    }
}

我如何覆盖模块中的配置?

2 个答案:

答案 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组件,都无关紧要。