2011-10-29 16 views
2

私はMVCアーキテクチャーがかなり新しくなっていますが、自分のフレームワークがほぼ完成しているのでうまくいきません。MVCでコントローラを呼び出す最も良い方法は何ですか?

それでも、私は「設計上の問題」を抱えていますが、コントローラを呼び出す方法は?

ユーザーが[送信]ボタンを押したかどうかをチェックする関数のようなコントローラ。コントローラの

例:

$class->login($_POST['username'], $_POST['password'])

私はMVCフレームワークの多くを知っていると、アプリが$_GETのparamsとURLでそれを呼び出すが、私はそれが一つの方法またはログインなどの機能を必要とするページごとに1つのクラスを持つことが愚かだと思う。

方法あなたはそれをやっていますか?あなたの方法は何ですか?

ご協力いただきましてありがとうございます。

答えて

1

あなたはすでに何らかの形で使用しているかもしれないが、それを知らないかもしれないフロントコントローラーの概念(および制御の逆転)を調べたいかもしれません。フロントコントローラーは、URLと現在の状態を分析し、ロードするコントローラーを決定します。

私のフレームワークには、属性を持つ「ルート」があり、その1つは「ログインが必要」です。フロントコントローラーは、「ルート」/コントローラーを実行する必要があるかどうかを判断し、ログイン要件など、そのルートの前提条件をチェックします。ユーザーがログインしていない場合は、ログインした「ルート」/コントローラーが、要求された「ルート」/コントローラーの代わりにロードされます。ログインが成功すると、制御は適切な「ルート」コントローラに渡されます。

ログインを管理するのは各コントローラの仕事ではなく、1つのコントローラ、通常はフロントコントローラです。すべてのコントローラは、ロードするコントローラを決定するフロントコントローラであるため、任意のURLの下にロードできる必要があります。サブコントローラーは「なぜ」ロードしているのか分からず、1つのジョブを実行するためにロードしているだけです。

1

関数requireAccess($ access_level)を含むベースコントローラを持つことができます。他のコントローラはこのコントローラを拡張する。正しいアクセスレベルが存在しない場合、requireAccess()はログインページにリダイレクトされます。

MVCのクリーンURLにGET変数を使用するリダイレクトについては、これをお勧めしません。スラッシュを含む変数を必要とするため、問題が発生する可能性があります。その代わりに、通常は元のリクエストuriを取得し、それを自分で解析したいと考えていました。

通常、MVC URLはパターンに従います/Controller/Action/Id/etc

関連する問題