CakePHPで各ビューで特定の処理をコンポーネントでまとめて呼び出したい場合があると思います。
単純に考えるとビューにコンポーネントをセットすればよいと思いますが、ヘルパーからコンポーネントを呼び出す方法もあるみたいなので、今回はそれを試してみたいと思います。
調べると結構みつかるのですがCakePHPのバージョンが異なるのかうまく動かなかったのでCakePHP2.4で動くように修正しました。
今回は、共通コンポーネントとしてCommonComponentを共通ヘルパーCommonHelperから呼び出す方法を考えています。
CommonComponent
Controller/Component/CommonComponent.php
class CommonComponent extends Component { public function getString() { return 'CommonComponent::getString'; } }
呼び出したいメソッドとメソッド内容は適当です。
CommonHelper
View/Helper/CommonHelper.php
class CommonHelper extends AppHelper { function __call($methodName, $args) { App::import('Component', 'Common'); $common = new CommonComponent(new ComponentCollection()); return call_user_func_array(array($common, $methodName), $args); } }
これで、CommonHelper内に存在しないメソッドが呼び出された場合は、CommonComponentのメソッドを呼び出すようになります。
コントローラー
public $components = array('Common'); public $helpers = array('Common');
CommonComponentとCommonHelperをそれぞれ登録します。
ビュー
<?php echo $this->Common->getString() ?>
のようにすることで呼び出されます。
今回は、画面上に「CommonComponent::getString」と表示されると思います。
終わりに
呼び出したメソッドがクラス内に存在しなければ別クラスのメソッドを呼び出すという方法なので、若干利用については注意が必要だと思います。
こういうやり方もありますよーということですね。