酔いどれの徒然 RSSフィード

2009-08-11

[][]モデルの中でコンポーネントを使う

いまだにcakePHPにおいて、どこに何を書くべきか、

という部分が自分で固定しない。


そうした中で疑問や反省もでてくる。

ああ、ここに書くんじゃなかった、とか。

こっちに書いたほうがよかったんじゃないか、とか。


今回はそんな失敗?の中の一つについて、

なんとかしちゃう方法


前置きが長い?すいません、そうですねよく言われます。

あんまり短くても嫌われるかと思って。どこでだよ。




つわけで、お題の、「モデルの中でコンポーネントを使いたい」です。


コンポーネント自体はコントローラーの中で使うようになっています。

だから、そう。つまり。



「コントローラー自身をモデルに渡してしまえば使えます。」



おい。なんだそのAddHocな対応。


・・・こほん。

ま、まあ。どのモデルに実装されても、

どこかに契機となるコントローラーはいるはずで。

そのコントローラーが、該当のコンポーネントを使っていれば、

問題なく使えます。


いや、正直こんな使い方していいのか。いくないと思う。

でもしょーがねえじゃん、まず動かすだよ。


さてさて。


コントローラー側

<?php
class HogesController extends AppController {
    var $name = 'Hoges';
    // 使うコンポーネントを指定する。
    var $components = array('Foo');
    var $use = array('Hoge');

    function HugaHuga()
    {
        // まあモデルのメソッドを呼び出したりするわけです
        // で、そのときに自分自身(=コントローラーのインスタンス)を渡す
        $this->Hoge->doSomething( $this );
    }
}
?>

モデル側

<?php
class Hoge extends AppModel {
    var $name = 'Hoge';

    function doSomething( & $controller )
    {
        $controller->Foo->executeComponentMethod();
    }
}
?>

これで使えます。

気持ち悪いけど。反則っぽいけれど。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証