我宣布了一个班级
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的值?
感谢。
答案 0 :(得分:1)
使用此作为参考:
Yii2 component pass data to __construct
和此:
http://www.bsourcecode.com/yiiframework2/how-to-create-custom-component-in-yii2-0-framework/
http://www.yiiframework.com/doc-2.0/guide-concept-components.html
希望它会对你有所帮助。
答案 1 :(得分:0)
This answer建议这样做:
'components' => [
'myComponent' => [
'class' => 'frontend\components\MyComponent',
'prop1' => 3,
'prop2' => 7,
[1, 2]
],
但我还没试过。
问题是为什么你想把它作为带有构造函数参数的可配置组件?
如果组件中的构造函数参数是在config中给出的(以后更改),那么从MyComponent准备扩展类可能更好,其中构造函数params已经设置。
第二种方法是准备$ param1和$ param2作为组件参数(所以类似于prop3和prop4),这样你就可以轻松地修改它,而不必重写构造函数。