アプリケーションに現在使用しているMVCアーキテクチャの制限の1つに遭遇しました。現在、私のURLは次のようになっています。
www.example.com/controller/action
各リクエストはフロントコントローラーに到着し、フロントコントローラーはURLからリクエストされたコントローラークラスをロードし、そのアクション(メソッド)を実行します。ネストされたコントローラーの使用を開始する必要があるまで、これは正常に機能します。
例:createUser()、editUser()、deleteUser()などのメソッドを保持する「users」コントローラーがあります。現在のURL構造ですべて完全に可能です...しかし、ユーザータイプも管理する必要がある場合はどうでしょうか。createUserType()、editUserType()などのメソッドも保持する別のコントローラー'usertypes'が必要になります...ただし、ユーザータイプはユーザーの一部であるため、'usertypes'コントローラーはusersコントローラー内にネストする必要があります。 :
www.example.com/users/usertypes/addusertype
ただし、現在のURL構造では、これは不可能です...ネストされた(または、必要に応じてマルチレベルの)コントローラーを使用するにはどうすればよいですか?
更新:これが私が取り組んでいるアプリケーションの基本的な表現です:これは、3つのカテゴリ(プロモーション、メーリング、カード所有者)のデータを追加、表示、編集、削除できる管理部門向けの基本的なビジネスアプリケーションです。各カテゴリはデータベース内のテーブルを表し、独自の個別のフィールドがあります。アカウントは管理者が作成する必要があり、ユーザーは自分でアカウントを作成したり、ユーザープロファイルを参照したりすることはできません。
これらのカテゴリごとに、add()、edit()、getAll()、getSingle()、delete()などのアクションを保持するコントローラーを作成しました。これらの各アクションは、モデルから適切なメソッドを呼び出します。対応するビューをレンダリングします。
これはすべて、次のようなURLを持つ現在のURL構造で可能でした。
example.com/promotions/add
example.com/promotions/getsingle?id=123
最近、彼らは私に、プロモーション、郵送物、カード所有者の種類も管理できるようにするように頼みました。現在、彼らはすでに学校割引、20%割引などを持っています...しかし、彼らは彼らが望むようにもっと追加したいと思っています。
これは、add()、getAll()、getSingle()、delete()などのアクションも保持するPromotionTypesコントローラーが必要であることを意味します...PromotionTypesコントローラーを元のプロモーションコントローラーにネストできると便利です。 URLはそのように:
example.com/promotions/promotiontypes/add
それ以外の
example.com/promotiontypes/add
私の現在のフロントローダーでは、URLの最初の部分が自動的にコントローラーとして扱われ、2番目の部分がそこから実行するアクションとして扱われるため、これは不可能です。