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]
],