CakePHP1.3でヘルパーからコンポーネントを使えるようにする方法
まえがき
ヘルパーからコンポーネントを使えるようにする方法です。
Authコンポーネントのデータをヘルパーが自動で読み込んで表示したり出来たら便利そうです。
ただ、デフォルトでコンポーネントの参照をヘルパーに渡していないところを見ると、CakePHPの設計思想上問題があるように見えます。
まあやってしまった以上もとに戻すのも面倒ですから、この点に関しては見て見ぬ振りをしておきましょう
実現方法ヘルパーからコンポーネントを使えるようにするには、
1,Viewクラスを継承したAppViewクラスのインスタンスにコンポーネントの参照をセットした後、
2,コントローラにAppViewを使うようにセット、
3,ヘルパーからViewインスタンスへの参照を得る、
という流れで実現します。
これはCakePHPは1.3になってから、この方法が使えなくなったためです。
まずは、Viewにコンポーネントへの参照をセットします。
Viewクラスを継承したAppViewクラスを作成します。
<?php class AppView extends View { //コンポーネントのインスタンスを保持する private $conponents; function __construct(&$controller, $register = true) { //コントローラのインスタンスから参照を受け取る $this->conponents = $controller->Component; parent::__construct($controller); } //getメソッド public function &getConponents() { return $this->conponents->_loaded; } } ?>
次に、コントローラにAppViewを使うようにセットします。
ここでは一括でセットするためにAppControllerにセットしています。
<?php class AppController extends Controller { //ここに指定します var $view = "App"; function index() { return; } } ?>
最後にヘルパー内でViewインスタンスをセットします
コールバックメソッドの挙動の詳しい説明は「ヘルパーのコールバックメソッドを調査しました」へ
<?php class Use_Conponent_From_Helper extends AppHelper { //コンポーネントのインスタンスを保持する private $conponents; //.ctpファイルの実行前にViewインスタンスを取得してコンポーネントへの参照をセットしておく function beforeRender() { //Viewのインスタンスを取得 $view = ClassRegistry::getObject('view'); //Viewが保持するコンポーネントの参照をプライベートプロパティに保持します $this->conponents = $view->getConponents(); } }
以上でヘルパーからコンポーネントを使うようになりました