3

我已经宣布了一个班级

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 的值?

谢谢。

4

2 回答 2

0

这个答案建议这样做:

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

但我还没有尝试过。

问题是为什么要将其作为带有构造函数参数的可配置组件?

如果组件中的构造函数参数打算在 config 中给出(因此稍后不会更改),最好从 MyComponent 准备扩展类,其中已经设置了构造函数参数。

第二种方法是将 $param1 和 $param2 准备为组件参数(例如 prop3 和 prop4),这样您就可以轻松地对其进行修改,而不必重写构造函数。

于 2015-07-04T12:11:14.520 回答