2010-12-08 3 views
0

私はカスタムMVCアプリケーション/フレームワークを持っていますが、各アクションはコントローラクラス内の関数です。MVCアプリケーションコントローラで無効なフォームを処理するうまい方法はありますか?

私はsignupというアクションを持っており、ユーザーの詳細を要求するフォームを表示します。送信時には、データを検証し、ユーザーをデータベースに挿入して成功ページにリダイレクトするか、エラーが発生した元のビュー/フォームを再表示する必要があるアクションをprocessSignupに送信します。

アクションはいくつかのクエリを実行し、さまざまなデータをビューに渡します。例えば。ユーザーがドロップダウンで選択できる使用可能な国のリストを取得し、以前のフォームで入力した名前に基づいて推奨されるユーザー名のリストを取得し、モデルから他のデータを取得する必要があります。

エラーが発生した場合の私のprocessSignupアクションで、これらのすべてのクエリとビューのレンダリングを繰り返さないようにする方法を見つけようとしています。これらの状況を処理する標準的な方法は何ですか? signupアクションは前のフォームからPOSTデータを受け取るので、申し込みフォームをGETPOSTに基づいて自分自身と支店に送信することはできません。

私は直接signup関数を呼び出すことができ、それが無効な形式のため、通常の要求とものを区別するためのオプションのパラメータを受信して​​いるが、それはハックようです。他のフレームワークはどのようにこのシナリオを処理しますか?私はPHPを使用していますが、これは言語特有の問題よりも上位の質問です。

+0

独自のスクリプトのみのフレームワークを使用していますか?通常、Zend of Symfonyのようなフレームワークは、フォーム処理のための優れたクラスを持っています。バリデータを使ってデータを実行し、検証エラーが発生すると、エラーメッセージとともに同じフォームが表示されます。 – Dmitri

答えて

1

重複するコードを避けることは、MVCフレームワークにとって一意ではありません。標準的なアプローチは、ビューをレンダリングする前にsignupprocessSignupという両方のプライベート関数を呼び出すだけです。ような何か:

private function setCommonVars() 
{ 
    // set country, username arrays, etc... 

} 

は限りsignupビューをレンダリングするように、MVCについて柔軟な事はあなたがビューを再利用することができるということです。フレームワークには、コントローラメソッド内のビューを明示的に選択する方法(たとえば、$this->view = 'signup')が必要です。こうすれば、processSignupにエラーが発生した場合は、レンダリングする前にsignupビューを選択できます。

関連する問題