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コンポーネントなどがあります。
これらを活用して、なるべく少ないプログラムに収めたいものです。
コメントする