2

MVCでのHTMLフォーム処理について疑問に思っています。私は現在コハナを使用していますが、質問は本質的に一般的です。だから私は2つのアプローチについての意見と推奨事項を集めたいと思います:

  1. 処理を続行すると、次のフォームが表示されます。

    class Controler_Sample
    {
        public function action_one
        {
            $view = View::factory('form');
    
            if($_POST)
            {
                $model = new Model_SomeModel;
                //validate
                try($model->values($_POST)->save();
                {
                    //on success go to action with success logic using post redirect get pattern
                    $this->request->redirect('Sample/sucess')
                }
                catch(Exception $e)
                {
                    //on fail attach error message to form view
                    $view->set('errors',$e->errors);
                } 
            }
            echo $view;
    
        }
    }
    
  2. これを表示する以外のアクションでフォーム処理を維持する

    class Controler_Sample
    {
        public function action_one
        {
            //display form, with errors if there are anny passed in GET
            echo View::factory('form')
                 set->('errors',$this->request->get('errors',FALSE);
        }
    
        public function action_two
        {
            if($_POST)
            {
                $model = new Model_SomeModel;
                //validate
                try($model->values($_POST)->save();
                {
                    //on success go to action two using post redirect get pattern
                    $this->request->redirect('Sample/success')
                }
                catch(Exception $e)
                {
                    //on fail create new hmvc call to action_one with errors in GET
                    //im don't remember the syntax, let's assume it's here ok :D
                } 
            }
        }
    }
    
  3. あなたが好む他のアーキテクチャ?

最初のアプローチは入力と処理が高速ですが、2番目のアプローチはより再利用可能です-フォームを処理するaction_twoは、APPの他の場所のフォームまたはajaxから呼び出すことができます。

どう思いますか ?

4

3 に答える 3

0

2番目のアプローチを使用します。ほとんどのWebページは、二重送信の問題を省略し、更新を修正するために、 Redirect-After-Post手法を実装しています。したがって、後処理はとにかく結果セットにリダイレクトされます。Ikkeが言ったように、これはメソッドを設計するための良い方法でもあります。ifelseステートメントのウッドに続いて進化するifelseツリーの奇妙な組み合わせよりもメソッドを理解する方がよいからです。single responsobility principleprocess_postshow_form

于 2011-07-09T19:23:54.157 に答える
0

私は2番目のアプローチがより良いと言います。

これは単一責任の原則に準拠しており、コードを再利用する方が簡単です。

于 2011-07-09T19:16:03.773 に答える
0

さらに、2つの異なるコントローラーで同じロジックを使用する場合は、コマンドパターンを使用できます。コマンドを作成して、2つの異なる場所で使用するだけです。

于 2011-07-20T17:31:18.247 に答える