2009-08-11
■[技術][cakePHP]モデルの中でコンポーネントを使う
いまだに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(); } } ?>
これで使えます。
気持ち悪いけど。反則っぽいけれど。
トラックバック - http://d.hatena.ne.jp/codedrunk/20090811/1249960520
リンク元
- 5 http://d.hatena.ne.jp/bobchin/20080805/1217913768
- 5 http://www.google.co.jp/search?hl=ja&q=cakePHP+モデルの中 コンポーネント&lr=&aq=f&oq=
- 5 http://www.pythagoras.bz/index.php/default/detail?url=http://d.hatena.ne.jp/codedrunk/20090811/1249960520
- 3 http://www.google.co.jp/search?q=cakephp モデル コンポーネント&btnG=検索&hl=ja&rlz=1B3GGGL_jaJP326JP327&sa=2
- 3 http://www.google.com/search?hl=ja&num=50&q=コンポネート 自作&lr=lang_ja
- 2 http://d.hatena.ne.jp/keyword/CakePHP
- 2 http://www.google.co.jp/reader/view/
- 2 http://www.google.co.jp/search?hl=ja&lr=lang_ja&client=firefox-a&rls=org.mozilla:ja:official&hs=gOb&ei=DouGSvDwEoWpkAXckqCsCQ&sa=X&oi=spell&resnum=0&ct=result&cd=1&q=cakephp+outer+join&spell=1
- 2 http://www.google.co.jp/search?q=cakephp+element&lr=lang_ja&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:ja:official&client=firefox-a
- 2 http://www.google.co.jp/search?source=ig&hl=ja&rlz=1G1GGLQ_JAJP315&q=モデル内でコンポーネントを使う&meta=lr=&aq=f&oq=