質問:
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
これにより、後でコントローラーにルーティングしようとすると、運が悪くなります。