ModelからComponentを呼び出す
cakePHP1.3をつかってて、たまーにモデルからコンポーネントを使いたくなる事があります。
あまり綺麗な方法ではないので多用するのは良くありませんが、同じロジックが重複するようりはマシかなと。
まあコンポーネントでロジックをガッツり書かないで別ライブラリとして作成して、コンポーネントでラッパーさせておけばいいんですが、cakePHPにあるライブラリ(HttpSocketとかSetとか…etc)つかっていると書き直すのもあれだなと。
で、真剣にモデルからコンポーネントを呼ぶ方法を考えてみました。
てかClassRegistry::getObject()でコンポーネントも取得できるんじゃね?
とかおもってコードを追ってみましたが、どうやらaddObjectとかinitとかしている気配がなし。。。
cake/libs/controller/component.phpの中にあるComponentクラスの_loadComponentsメソッドでコンポーネントをインスタンス化しているんですが、ふっつーにnewとか書いてありますね。。。。
まあAppContorllerとかで対象のモデルに渡してデータを渡してあげるってのでもいいのかなと。
|
|
でも例えばAppModelで共通の処理を持たせるメソッドでコンポーネントが必要な場合はこの方法にはちと無理がありますね。。
まあ、やってやれない事は無いと思いますが。。。。
まあいろいろと悩みましたが、結局ControllerでloadModelをするようなイメージでgetComoponentとかそんな感じのメソッドを作ればいいんじゃないかとうことで最終的に以下のように実装してみました。
コンポーネント
|
|
モデル
|
|
これでモデルからコンポーネントが触れますね。
あまり良くない方法かもしれませんが。。。。w