CakePHP2系です。
共通処理の正しい配置?書き方についてご教授下さい。
例えば、コントローラーで使う共通の処理を下記のようにコンポーネントに記述します。
コントローラーでそのコンポーネントを呼び出して使います。
PHP
1//HogeComponent.php 2 3App::uses('Component', 'Controller'); 4 5class HogeComponent extend Component { 6 7 public function startup(Controller $controller) { 8 $this->Controller = $controller; 9 } 10 11 public function getHoge() { 12 $a = 1; 13 $b = 2; 14 15 $this->Controller->set(compact('a', 'b')); 16 17 //↓HogeModelのgetData関数を使用 18 $data = $this->Controller->Hoge->getData($a, $b); 19 return $data; 20 } 21}
PHP
1//HogeController.php 2 3App::uses('AppController', 'Controller'); 4 5class HogeController extend Controller { 6 $use = 'Hoge'; 7 $component = 'Hoge'; 8 9 public function index() { 10 //なにか処理(コンポーネントを使わない) 11 } 12 13 public function hoge() { 14 //$this->Hoge = $this->Components->load('hoge'); 15 $data = $this->Hoge->getHoge(); 16 $this->set('data', $data); 17 } 18}
コントローラーの$componentに定義してしまうと、そのコンポーネントを使わないアクションのときも読み込まれてしまうと思います。
なので、必要なアクション時だけ$this->Hoge = $this->Components->load('hoge');
で読み込んで使おうと思ったのですが、
それだと、コンポーネントのほうでコントローラーのメソッドを使うためにstartupに指定している定義が効かず、
(読み込み順がおかしくなるからだと思うのですが)
コンポーネント内でコントローラーのメソッドが使えなかったので、$componentに指定をしました。
この場合、このコンポーネントを使うのがhoge actionだけだったとして、たくさんアクションが増えてくるとそのすべてでhogeComponentが読まれると思うのですが、
これはパフォーマンスの低下に繋がるのでしょうか。
もしくは、(DBが関係ないとしても)、HogeComponentの処理をHogeModelのほうに共通処理を書けば、
関数が呼び出された時だけ使われる?のでコンポーネントよりほかのアクションに影響なく、使えるのでは?と思いました。
Modelに、DBと全く関係のない関数を書いてもいいものなのでしょうか?
パフォーマンス的にどれが良いのか、綺麗な書き方・まとめかたとは・・・と悩んだので、質問しました。
未熟な質問で恐れいりますが、ご回答いただけると幸いです。
何卒よろしくお願い致します。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。