コンポーネントとは
CakePHPには
コンポーネントというのは、
(コントローラ間で) 共有できる小さな “コントローラレット” だ。
たとえば1つのコントローラ内のコードで重複する箇所が発生するとき、
コンポーネントを使うべきか否かはプログラマの裁量次第です。あるコードをコンポーネントに移すことで全体の開発効率が良くなると感じれば、
本記事ではCakePHP1.
コンポーネントファイルの仕様
設置場所
コンポーネントは通常、
クラス名・ファイル名の命名規則
コンポーネントは1つのクラスとして定義します。クラス名は
たとえば
- GihyoCommonComponentクラス
- app/
controllers/ components/ gihyo_ common. php
クラス定義
GihyoCommonコンポーネントのクラス定義は以下のようになります。CakePHPコアで定義されたObjectクラスを継承します。
<?php
class GihyoCommonComponent extends Object {
}
このクラスに自由にプロパティやメソッドを作成してコントローラから呼び出すことができます。
コンポーネントを作ってみよう
では、
<?php
class GihyoCommonComponent extends Object {
var $_index_rss_url = 'http://rss.rssad.jp/rss/gihyo/feed/rss2';
function getIndexRSS() {
return file_get_contents($this->_index_rss_url);
}
}
注:このサンプルはphpのsafe_
このコンポーネントをコントローラから使用する例が以下になります。
<?php
class ExampleController extends AppController {
var $uses = array();
var $autoRender = false;
var $components = array('GihyoCommon');
function index() {
echo $this->GihyoCommon->getIndexRss();
}
}
コンポーネントの使用において直接的に関係する箇所は以下の2ヵ所です。
var $components = array('GihyoCommon');
GihyoCommonの使用を定義しています。
使用したいコンポーネントがあるとき、
echo $this->GihyoCommon->getIndexRss();
GihyoCommonコンポーネントのgetIndexRssメソッドを呼び出しています。
コンポーネントはコントローラのインスタンス内に、
コンポーネントからモデルを使用したいときは
コンポーネントからはコントローラで定義したモデルなどはそのままでは使用することができません。コンポーネント内での $this は、
コンポーネント内でモデルを使用するには、
最も簡単な方法は、
<?php
class GihyoCommonComponent extends Object {
function getUsers() {
$user =& new User();
return $user->findAll();
}
}
この例では、
ちなみに、
ということで、
事前準備として、
<?php
class GihyoCommonComponent extends Object {
var $_controller;
function startup(& $controller) {
$this->_controller = $controller;
}
function getUsers() {
return $this->_controller->User->findAll();
}
}
モデル以外にもコントローラのプロパティに値をセットしたりもできるので、
なお、
コンポーネントをうまく使えると、