« PreviousNext »

Entry

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

CakePHPにおいては、「コントローラ用の共通関数はコンポーネント」に、
「ビュー用の共通関数はヘルパー」に、それぞれ定義する決まりになっています。

このため、「コンポーネントに定義されている関数をビューから使用したい」というケースにどう対応すればよいのかということになりますが、(手法としては色々あると思われますが)、下記のようにPHPの「__call」関数と「call_user_func_array」を使用することで実現可能です。

// 共通コンポーネントクラス(app/controllers/components/common.php)
class CommonComponent extends Object
{
    (いろいろな関数定義)
}
// 共通ヘルパークラス(app/views/helpers/common.php)
require_once APP.'controllers'.DS.'components'.DS.'common.php';
class CommonHelper extends AppHelper
{
    function __call($methodName, $args)
    {
        $common = new CommonComponent();
        return call_user_func_array(array($common, $methodName), $args);
    }
}

上記により、CommonHelperに存在しない関数はCommonComponentの呼び出しに変換されますので、コントローラで

var $components = array('Common'... その他のコンポーネント);
var $helpers = array('Common', ...その他のヘルパー);

と定義しておけば、ビューからは

$common->共通コンポーネントの関数()

と呼び出すことで、コンポーネントの関数を呼び出すことができます。

Page Top

« PreviousNext »