应用程序配置文件

时间:2015-07-03 18:04:55

标签: yii2 yii2-advanced-app yii2-user yii2-basic-app

我宣布了一个班级

class MyComponent extends Component {

    public $prop1;
    public $prop2;

    public function __construct($param1, $param2, $config = [])
    {
        // ... initialization before configuration is applied

        parent::__construct($config);
    }
..............

现在,我可以使用

创建它的实例
$component1 = new MyClass(1, 2, ['prop1' => 3, 'prop2' => 4]);

或,

$component2 = \Yii::createObject([
            'class' => MyClass::className(),
            'prop1' => 13,
            'prop2' => 40,
        ], [1, 2]);

现在,我想将其注册为应用程序组件。我可以通过以下方式做到这一点:

'components' => [
        'myComponent' => [
            'class' => 'frontend\components\MyComponent',
            'prop1'=>3,
            'prop2'=>7
        ],

但是,当我将其注册为应用程序组件时,如何在构造函数中传递$ param1和$ param2的值?

感谢。

2 个答案:

答案 0 :(得分:1)

答案 1 :(得分:0)

This answer建议这样做:

'components' => [
    'myComponent' => [
        'class' => 'frontend\components\MyComponent',
        'prop1' => 3,
        'prop2' => 7,
        [1, 2]
    ],

但我还没试过。

问题是为什么你想把它作为带有构造函数参数的可配置组件?

如果组件中的构造函数参数是在config中给出的(以后更改),那么从MyComponent准备扩展类可能更好,其中构造函数params已经设置。

第二种方法是准备$ param1和$ param2作为组件参数(所以类似于prop3和prop4),这样你就可以轻松地修改它,而不必重写构造函数。