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

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

関連記事

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

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

CakePHPでコントローラーの呼び出しURLを変更する

CakePHPでは基本的にURLとコントローラーは一致します。 例えば /users/index というURLの場合、呼び出されるコントローラーは UsersController が呼び出されます。 …

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

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

no image

Windows7でXAMPPを使う <設定編>

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

WindowsにLaravel 5.4をインストールする

どうもPHP初心者、Laravel初心者のものです。 今回の案件ではPHPのフレームワークにLaravelを使うことにしましたのでインストール手順をまとめたいと思います。 環境 ホストOS:Windo …