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

1

これを参考にしてください:

Yii2 コンポーネントはデータを __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

それがあなたを助けることを願っています。

于 2015-07-06T04:10:36.297 に答える
0

この回答は、次のようにすることを提案しています。

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

しかし、私はそれを試していません。

問題は、コンストラクターのパラメーターを使用して構成可能なコンポーネントとして作成する理由です。

コンポーネントのコンストラクターパラメーターが構成で指定されることを意図している場合 (したがって、後で変更しない場合)、コンストラクターパラメーターが既に設定されている MyComponent から拡張クラスを準備することをお勧めします。

2 番目の方法は、$param1 と $param2 をコンポーネント パラメーター (prop3 と prop4 のようなもの) として準備することです。これにより、簡単な方法で変更でき、コンストラクターをオーバーライドする必要がなくなります。

于 2015-07-04T12:11:14.520 に答える