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

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

関連記事

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

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

no image

Windows7でXAMPPを使う <インストール編>

Windows7を使う機会があったので、PHPを実行できるように環境を整えてみました。 環境 Windows7 Professional なんで、Windows8ではなくWindows7ということは聞 …

CakePHPで簡単なモデルを作る

前回、簡単なビューとコントローラーを作ったので今回はモデルを作ってみたいと思います。 テーブル名と作成するモデルファイル名はCakePHPの命名規則がありますので、基本的にはそのルールにしたがって作成 …

Deployerでデプロイ時にGrafanaのアノテーションをつける

今作っているLaravelのプロジェクトはそれほど大きくないのでDeployerを使ってデプロイしています。 Zabbixを使ってAPサーバーとDBサーバーのメトリクスを取っているのでGrafanaを …

Windows10にChocolateyを使ってPHPをインストールする

Webの業界にはそれなりの年数いるのですが、PHPはお試しでCakePHPを少し触ったことぐらいしかなくプロダクション環境で構築したことはありませんでした。 それが、今回初めてPHPでアプリケーション …