3

私は Wiredesignz による HMVC 拡張で CodeIgniter を使用しています。

私の Web アプリは、主にテキスト記事を扱います。というモジュールがありますarticles。記事モジュールのモデル には、articles_modelデータベースを記事に変更する関数が含まれています。たとえば、次のように記事を更新します。

$this->articles_model->update_article();

ユーザー ダッシュボード用の別のモジュールがあります。ユーザーは、ダッシュボード内から記事を更新することがあります。このアクションはダッシュボード モジュール内のビューから実行されるため、要求はダッシュボード コントローラーから行われます。

この状況では、ダッシュボード コントローラーが記事モデルと通信できるようにするにはどうすればよいでしょうか? これまでに出くわしたいくつかのオプションは次のとおりです。

  1. update_article()記事コントローラーで関数を作成します。articles_model同じ名前の関数を呼び出すだけです。ダッシュボード コントローラーで、記事コントローラー関数を呼び出しますupdate_article()。これは、モジュラー設計では、コントローラーが異なるモジュール間の通信ポイントである必要があることを読んだためです(source)。また、コントローラー同士は決して会話してはならないという意見も見ました。したがって、私の混乱。

  2. update_article()で関数を複製することもできdashboard_modelます。このように、ダッシュボード コントローラーは、独自のモジュール内で独自のモデルを呼び出すだけで済みます。update_article()関数はダッシュボード コントローラーだけでなく、他のかなりの数のコントローラーによっても呼び出されるため、私の直感では、これは正しい方法ではないとわかりました。これにより、多くの重複コードが発生します。

アドバイスをいただければ幸いです。

4

1 に答える 1

0

別のモジュールarticlesからモジュールからモデルをロードできます。articlesDashboard

モデルをモジュールのコンストラクター関数 (例: Dashboard) にロードするだけで、次のようにモデルを使用できるようになります。

function __construct() {
  parent::__construct();

  ...

  // this is case sensitive, 1st part is the module, 2nd part is the class name
  $this->load->model('articles/Articles');
}

次に、コントローラーのどこでも (例: Dashboard)、 を呼び出すことができます$this->articles_model->update_article();

于 2012-09-09T03:11:08.067 に答える