CMS構築を目的にPHPをベースとしたWordPress、CakePHPやPEARなどオープンソースを中心に解説しています

CakePHPではコンポーネントという概念があります。
簡単に説明すると複数のコントローラで同じ処理を共有したい場合に、コンポーネントとして切り出して再利用するわけです。クラス、パッケージ化みたいなものでしょうか。

例えばコンポーネント「test」を作成したい場合、まずは新規ファイル「/app/controllers/components/test.php」を作成します。そのファイルの中身を以下のように実装したとします。

class TestComponent extends Object{

	var $controller = null;
	var $settings = array();

	function initialize(&$controller, $settings){
		$this->controller = $controller;
		$this->settings = $settings;
	}
	function show(){
		echo $this->settings['test1'] . "<br />";
		echo $this->settings['test2'];
	}
}

initializeはクラスでいうコンストラクトのようなもので、コンポーネントが呼ばれた際に、初めに実行される処理です。

このコンポーネントをコントローラに組み込む方法は以下のとおりです。

public $components = array(
	'Test' => array('test1' => 'Hello World! Component', 'test2' => 2010),
);

function index(){
	echo $this->Test->show();
}

コントローラ内で変数$componentsを用意します。そこで、コンポーネント名「Test」を指定し、パラメータを配列で渡します。
処理の呼び出しは「$this->Test->show()」というようにして、コンポーネント名、関数の順に指定します。コンポーネントを見てお分かりのとおり、関数showは2つの引数を改行をはさんで表示するので、以下の結果となります。

Hello World! Component
2010

ちなみに、コントローラから複数のコンポーネントを呼び出すことも可能ですし、コンポーネント内で別のコンポーネントを呼び出すことも可能です。

また、コンポーネントには予め用意されているものがあり、Auth、Security、Session、Cookie、Email、RequestHandlerコンポーネントなどがあります。

これらを活用して、なるべく少ないプログラムに収めたいものです。

このエントリーをはてなブックマークに追加

Comment

Comment Form

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

Monthly Archives

Search