すべてがモジュールであるMVCを構築しています。これにより、フォーラムやユーザーモジュールなどのオブジェクトのコレクションを分離して、MVCをさらに整理できるようになります。
/blog
/controller
/model
/view
/user
/controller
/model
/view
/forum
/controller
/model
/view
私は現在、クラスを含むようforum/edit/34
なもののルートをマップしています。(これは、すべてのアクションがコントローラーのメソッドである標準的なアプローチとは少し異なります)。これにより、コントローラーの個々の「アクション」をすべて独自のファイルに分割できるため、10個の異なるアクションで大規模なコントローラーを管理する必要がなくなります。/forum/controller/edit.php
Forum_Controller_Edit
Forum_Controller::edit()
とにかく、ここに問題があります。モジュールに新しいコントローラーを追加したいとします。たとえば、フォーラムのトピック(forum/topic/view/34
)が必要だとします。新しい「トピック」モジュールを作成できます。
/forum
/controller
/model
/view
/topic
/controller
/model
/view
ただし、1)/topic/view/
の代わりにURLを使用する必要がありますforum/topic/view
。2)関連するコンポーネントを分離します(トピックはフォーラムモジュールの一部である必要があります)。3)一般的な「トピック」を作成できなくなります。必要に応じて、コンテンツノードなどのモジュール。
では、各モジュールで複数のコントローラー(複数のアクションを含む)を許可しながら、モジュラーMVCを構築するにはどうすればよいですか?
Kohana Frameworkは、この問題を解決するためにHMVCを実装することを決定しました。ただし、その結果、ロードするファイルの正しい場所を見つけるために多くのis_file()チェックが行われます。I / Oチェックはコモディティハードウェアでは非常に貴重であるため、そのオプションとは考えていません。また、クラスのどのバージョンがロードされているかが明確でないため、同じ名前の複数のクラスを操作するときに混乱が生じる可能性があります。
パスを事前に設定したり、適切なクラスのフォルダーをチェックしたりすることなく、この問題の解決策を見つけたいと思います。それでも、私が調べた最後の20のフレームワークのうち、この普遍的な問題に対する良い答えはないようです。誰かアイデアがありますか?
ルーティングアップデート
ルーティングを実装する場合、どのように機能しますか?最初の(/ forum)、2番目の(/ forum / view)、および3番目のレベル(/ forum / topic / view)をどのように処理しますか?私のルートは、パラメーターを使用して、第3レベルのルートと第2レベルのルートの違いをどのように知ることができますか?言い換えれば、私のシステムはこれらのどれをしようとしますか?(URI「フォーラム/トピック/ビュー/ 34」を指定)
$controller = new \Forum\Controller\Topic\View;
$controller->action('34');
// or
$controller = new \Forum\Controller\Topic;
$controller->view('34');
// or
$controller = new \Forum\Controller;
$controller->topic('view', '34')
ルーティングアップデート2
カイルズのアドバイスを受けて、私はすべてのコントローラーにルートセットが必要であると判断しました。これにより、URLパス「forum / topic / view/34」ルートより上のクラスのどれも定義できるようになります。結局のところ、すべてのURLは重要であり、配置しているファイルシステム構造に基づくべきではありません。彼は、URLのデザインは私たちがよく言うよりも注目に値すると言っているのは正しいと思います。