2012年12月19日水曜日

[cakephp 1.3] コンポーネント内でモデルを使う

コントローラでusesしているモデルであれば

class UtilsComponent extends Object {
    private $controller;

    public function initialize(&$controller)
    {
        $this->controller = $controller;
    }

    function pdate($id) {
        //コントローラーのusesにあるもの
        $tmp = $this->controller->Picture->read('modified',$id); 
        return $tmp['Picture']['modified'];
    }
}

これでいける。
しかし、呼び出し元のコントローラでusesしていないとエラーになってしまう。
それでもう一つの方法である。controller::loadModel()を使うのだがこれは コントローラーでしか使えないみたいなので同じ動きをする ClassRegistry::init()を使う。
その場合は

class UtilsComponent extends Object {
    function pdate($id) {
        $Picture = ClassRegistry::init('Picture');
        $tmp = $Picture->read('modified',$id);
        return $tmp['Picture']['modified'];
    }
}