MVCアプローチを使用してPHPでWebアプリケーションを開発しています(フレームワーク、純粋なPHPを使用していません)。MVC でよくあることですが、すべての要求はフロント コントローラーに到着し、フロント コントローラーはそれを対応するコントローラーにルーティングし、要求されたアクションを実行します。URL 構造は次のようになります。
www.site.com/controller/action
さまざまなカテゴリの製品を扱う e コマース サイトを構築しているとします。可能な URL は次のとおりです。
www.site.com/sofas/overview
www.site.com/video-games/overview
最初の URL では、"sofas" コントローラーが読み込まれ、その overview() メソッドが実行されます。これらの製品を親カテゴリ内にネストする必要があるまで、これはすべてうまく機能します。私が何を意味するかを示すために、前の 2 つの URL を使用します。
www.site.com/furniture/sofas/overview
www.site.com/electronics/video-games/overview
現在、「ビデオゲーム」コントローラーは「電子機器」コントローラー内にネストされています。ただし、現在の 'load controller -> execute action' 構造では、これは機能しません。
考えられる解決策は、存在しないアクションが要求された場合 (「ビデオゲーム」) に実行される親コントローラー (「電子機器」) 内にメソッドを作成することです。このメソッドは、要求されたアクションがコントローラーとして存在するかどうかを確認します。その場合、コントローラーがロードされ、そのアクション (「概要」) が実行されます。
ここSOを含め、標準のフロントコントローラーパターンのこの制限に対する解決策を無益に探しました。MVC の実装は正しいと思いますが、フロント コントローラーにはまだ制限があります。