PHP

CakePHPでビューからコンポーネントを呼び出す方法

投稿日:2014/03/13 更新日:

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」と表示されると思います。

終わりに

呼び出したメソッドがクラス内に存在しなければ別クラスのメソッドを呼び出すという方法なので、若干利用については注意が必要だと思います。
こういうやり方もありますよーということですね。

-PHP

執筆者:


comment

メールアドレスが公開されることはありません。

関連記事

no image

Windows7でXAMPPを使う <設定編>

前回、インストールを行ったので今回設定をしてみたいと思います。 前提条件として、外部には公開しないので、ガチガチに設定は行いませんが必要最低限の設定を行いたいと思います。 といっても、ほとんど設定する …

Laravelでテーブルの主キーに文字列型を使う場合のモデルの定義

ポストタイトルの通りなんですけどLaravelでテーブルの主キーに文字列型を使う場合ですがModel#findで検索すると結果は帰ってくるのですが主キー項目の値を表示されると0と表示されてしまいました …

mixhostにPHP Deployerを使ってデプロイする

今年の夏に、このブログのホスティング環境をmixhostに切り替えました。 mixhostはComposerも使えるのでDeployerでデプロイに挑戦してみました。 Gitのインストール Deplo …

CakePHPで簡単なコントローラーとビューの作成

先日こちらの記事でCakePHPのインストールを行いました。 今回はとりあえず最初の一歩としてコントローラーとビューを使ってみたいと思います。 最終的な目標はすごい簡単で/cake/hello/にアク …

CakePHPで独自のコントローラーを継承する方法

CakePHPで独自に作ったコントローラーを継承する方法を調べました。 自分はJavaをよく使っていたというのは変かもしれませんがコントローラーの継承というのはそれほど違和感はないのですがCakePH …