1

質問:

HMVC モジュールのコントローラーを拡張してから、Codeigniter の URI ルーターでその拡張クラスを呼び出すにはどうすればよいですか?

詳細:

HMVC に関連する次の典型的な Codeigniter ファイル構造を想定します。

/
/application
/application/modules
/application/modules/module-name
/application/modules/module-name/controllers
/application/modules/module-name/controllers/controller-name.php
/application/modules/module-name/models
/application/modules/module-name/models/model-name.php
/application/modules/module-name/views
/application/modules/module-name/views/view-name.php
/application/config
/application/config/routes.php

にクラスをEvents保存してい/application/modules/events/controllers/events.phpます。それを拡張して、それぞれのコントローラーに特定の機能を提供したいと思いCoursesますConferences。これらのコントローラーを同じモジュール フォルダー (つまり/applications/modules/events/controllers/courses.php、など) に保存したいと思います。次のように、 http://www.example.com/coursesにアクセスするユーザーをcoursesコントローラーにルーティングしたいと思います。

$route['courses'] = 'courses/getList';

また、 http://www.example.com/conferencesにアクセスするユーザーを次のconferencesようにコントローラーにルーティングしたいと思います。

$route['conferences'] = 'conferences/getList';

問題:

残念ながら、コースは独自のモジュールに含まれていないため、ルーターで見つけることができないため、これを機能させることができないようです。courseルーターは次のファイル パスでクラス ファイルを探しているようです: /applications/modules/courses/controllers/courses.php. そのファイルを前述のパスに移動しようとしましたが、拡張元のEventsコントローラー クラスの場所を尋ねられます。Courses

考えられる解決策:

考えられる解決策の 1 つは、各コントローラーを 1 つのコントローラー ファイルに含めることです。ただし、各クラスを独自の個別のファイルに保存し、可能であれば拡張クラスとグループ化するのが好きなので、これを行いたくありません。私はよりエレガントで完全に正しい解決策を探しています。単一のファイルに対してこの手法を試みたとしても、アクセスするにはファイルに含まれ/applications/modules/courses/controllers/courses.phpている必要があります。conferencesこれにより、後でコントローラーにルーティングしようとすると、運が悪くなります。

4

1 に答える 1

1

追加することで

require APPPATH."modules/events/controllers/events.php";

拡張クラス (coursesおよび) の先頭まで、モジュールconferencesをそのままにしておくことができます。Events

残念ながら、coursesconferencesコントローラ用に別のモジュールを作成する必要があります。うーん、完璧にはできないと思います。

于 2012-05-13T04:22:11.240 に答える