フリーランスのためのネットビジネス専門学校 ネットで独立開業を目指す人を応援
フリーランスのためのネットビジネス専門学校 ネットで独立開業を目指す人を応援

OctoberCMSプラグイン作成:コンポーネントから他のコンポーネントを組み込む

コンポーネントから他のコンポーネントを組み込む方法は公式ドキュメントで触れられていますが、詳細が書かれていない上に、メソッドを実装しているのがどこかわからないので引数がわからなかったのでメモ。

他のコンポーネントをロードする方法

下記のようにComponentBase::addComponent()でロードすることができる。

<?php namespace PikanjiMyPluginComponents;

use CmsClassesComponentBase;

class MyComponent extends ComponentBase
{
    public function init()
    {
        $properties = [
            "prop1" => "hoge",
            "prop2" => "fuga",
        ];
        $cmpAnotherComponent = $this->addComponent(
                'PikanjiMyPluginComponentsAnotherComponent',
                'anotherComponent',
                $properties
            );
    }
}

詳細

いつそのコンポーネントが必要になるかにもよるが、とりあえずinit()でロードすれば、実際にページやコンポーネントのロジックが実行される前にロードしておけるので安全。

ComponentBase::addComponent()の詳細は下記の通り

  • 第一引数:コンポーネントのクラス名
  • 第二引数:任意のコンポーネント名
  • 第三引数:コンポーネントのプロパティ
  • 返り値:コンポーネントのインスタンス

蛇足

ComponentBase::addComponent()の実装は、CmsClassesController::addComponent()にある。

ComponentBaseクラスでは実装されていないが、存在しないメソッドが呼び出された時にComponentBase::__call()が実行され、この中でControllerの同名のメソッドが呼び出される仕組みになっている。

おまけ

ロード済みのコンポーネントのインスタンスを取得するメソッドもあるので参考までに。

$cmpAnotherComponent = $this->findComponentByName('AnotherComponent');

コメント

記事に戻る

コメントを残す