スマートフォンやhtml5+CSS3など新技術に四苦八苦。jQuery、AjaxなどJavaScriptも難しいですね。そんなWebに悩む人のネタ帳です。

CakePHPでコンポーネントを作成する

update : 2011/01/07

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コンポーネントなどがあります。

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

B!

Comment

Comment Form

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

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

Monthly Archives