Yii2 应用程序配置文件中的Yii 2自定义组件

Yii2 应用程序配置文件中的Yii 2自定义组件,yii2,yii2-advanced-app,yii2-user,yii2-basic-app,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(

我已经申报了一个班级

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]);
或者

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

'components' => [
        'myComponent' => [
            'class' => 'frontend\components\MyComponent',
            'prop1'=>3,
            'prop2'=>7
        ],
但是,当我将其注册为应用程序组件时,如何在构造函数中传递$param1和$param2的值

谢谢。

建议这样做:

'components' => [
    'myComponent' => [
        'class' => 'frontend\components\MyComponent',
        'prop1' => 3,
        'prop2' => 7,
        [1, 2]
    ],
但我还没试过

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

如果组件中的构造函数参数是要在config中给定的(因此稍后将保持不变),那么最好从MyComponent中准备扩展类,在MyComponent中已经设置了构造函数参数


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

将其用作参考:

这是:


希望它能对你有所帮助。

'prop1'=>3,'prop2'=>7、[1,2]----不起作用。也许我在任何地方都不需要它,或者我可以用其他方式来做,但问题是为什么我不能做,或者为什么在可以用其他2种语法做的情况下没有选择做它?@sudip有一个选项-你可以像你说的那样,用“new*”或“Yii::createObject()”来调用新组件对象。对我来说,应用程序配置只是为了让它更简单。为了确定,请尝试类似于“myComponent”=>[[[class'=>…,“prop1'=>…],[1,2]]的东西,我昨天就试过了。它正在抛出InvalidConfigException
'components' => [
    'myComponent' => [
        'class' => 'frontend\components\MyComponent',
        'prop1' => 3,
        'prop2' => 7,
        [1, 2]
    ],