1

アプリケーションに現在使用している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番目の部分がそこから実行するアクションとして扱われるため、これは不可能です。

4

2 に答える 2

2

コントローラーをビューではなく各ドメインオブジェクトに関連付けたようです。

また、奇妙なルーティングは何ですか?なぜだめですか :

POST "www.example.com/profile/42/type"

特定のユーザーのプロファイルにタイプを追加しているためです。postType()これは、Profileコントローラーでのメソッドの実行に変換されます。

独自のルーティング メカニズムを構築している場合は、この回答が役立つ可能性があります。

肝心なのは、このような奇妙なコントローラーのコントローラーは必要ないということです。必要なのは、モデルレイヤーを見ることから始めるのではなく、持っているビューの種類を調べてから、それぞれのコントローラーを作成することです。

于 2012-08-15T00:26:17.477 に答える
1

フレームワークを使用しているかどうかについては言及していませんが、通常の方法は、「ルーター」に例外に特別な処理を適用させることです。たとえば、ZendFrameworkルーターなどです。

于 2012-08-14T23:52:40.703 に答える