2

我想知道 MVC 中的 HTML 表单处理。我目前使用 Kohana,但这个问题本质上是通用的。所以我想收集关于两种方法的意见和建议:

  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. 您喜欢的其他架构?

我看到第一种方法键入和处理速度更快,但第二种方法更可重用 - action_two,处理表单可以从 APP 中其他地方的表单或 ajax 调用。

你怎么看 ?

4

3 回答 3

0

我说第二种方法更好。

它坚持单一职责原则,而且是你自己说的,更容易重用代码。

于 2011-07-09T19:16:03.773 回答
0

此外,如果您希望在两个不同的控制器中使用相同的逻辑,那么您可以使用命令模式。简单地创建一个命令并在两个不同的地方使用它。

于 2011-07-20T17:31:18.247 回答
0

使用第二种方法。大多数网页都实现了Redirect-After-Post方法以省略重复提交问题并修复refresh。因此,后处理无论如何都会重定向到结果集。正如 Ikke 所说,这single responsobility principle也是设计方法的一种好方法,因为它比理解方法process_postshow_formif else 树的奇怪组合更好,后者随后演变为 if else 语句的木头。

于 2011-07-09T19:23:54.157 回答