• ベストアンサー

zendframeworkを勉強中です。

zendframeworkを勉強中です。 つい最近から勉強を始めました。 何とか思うような動作をさせる事はできてきたのですが根本的な事で悩んでおります。 アクションコントローラーの部分なのですが基本的に『init()』は大抵のファイルが共通になります。 ※例えばDBの接続やメンバ変数の設定など・・・ 具体的に今の私の見解は以下のようなイメージです。 class IndexController extends Zend_Controller_Action { public function init() { //大抵のファイルが共通なので何とかしたい } public function hogeAction() { //必要な処理 // fooActionと重複するようなソースであればmodelにclassファイルを作成 } public function fooAction() { //必要な処理 // hogeActionと重複するようなソースであればmodelにclassファイルを作成 } } 全く同様の関数を複数のファイルに作っても意味ないですしメンテも大変です。 参考書やマニュアルを見てもひたすら重複ソースを書くような内容しか見当たらなかったのですが 皆さんはどのような構成で構築されているのでしょうか? まだまだ理解が乏しいので、できるだけわかりやすく教えて頂けますと幸いです。 詳しい方がいらっしゃいましたらアドバイスを宜しくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

自分もZend_Controller_ActionのinitやZend_Db_Tableのsaveなど そこから発生するクラスは同様の処理を行う場合が多いので、 dcx147さんと同じような悩みを一時期持ちましたが、 今は、ZendFrameworkの提供するクラス群をラッパーした 独自の派生クラスライブラリを作って そちらを使用するような構成でシステムの構築を行っています。 例 [ライブラリクラス] class Dcx_Controller_Action extends Zend_Controller_Action {   public function init()   {     //共通処理   } } [実装] class IndexController extends Dcx_Controller_Action {   public function hogeAction()   {     //必要な処理     // fooActionと重複するようなソースであればmodelにclassファイルを作成   }   public function fooAction()   {     //必要な処理     // hogeActionと重複するようなソースであればmodelにclassファイルを作成   } } といった感じでいかがでしょうか?

dcx147
質問者

お礼

お返事ありがとうございます。 やはり抱える悩みは一緒なのですね~自分だけかと思っておりましたが安心しました。 確かにアドバイス頂いた方法であれば簡単に共通処理を実行する事ができますね! どんな方法がいいものか悩んでおりましたが参考にいじってみたいと思います。 非常に参考になるご意見ありがとうございます!

その他の回答 (1)

回答No.2

自分の考えが正しいかどうかは分かりませんが、modelはあくまでDBに紐付き、データの操作を行うのみにするべきです。 hogeActionとfooActionで重複するような処理は同じコントローラー内にプライベートメソッドを定義し、そこに記述する方がいいと思います。 例) private function _bar() {   hogeActionとfooAction共通の処理 }

dcx147
質問者

お礼

お返事ありがとうございます。 >modelはあくまでDBに紐付き、データの操作を行うのみにするべきです。 なるほど。確かにその方が共通性があり他人がメンテ等行う場合も仕様の理解が簡単ですね。 アドバイスを頂いた内容を基にいろいろ試してみたい思います。ありがとうございました!

関連するQ&A