PHP MVC Обработка форм в каком действии? - PullRequest
2 голосов
/ 09 июля 2011

Меня интересует обработка HTML-форм в MVC. В данный момент я использую 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, который обрабатывает форму, может вызываться из форм или ajax в других местах APP.

Что вы думаете?

Ответы [ 3 ]

0 голосов
/ 09 июля 2011

Используйте второй подход. Большинство веб-страниц используют методологию Redirect-After-Post , чтобы исключить проблемы двойной отправки и исправить refresh . Поэтому постобработка в любом случае будет перенаправлена ​​на набор результатов. Как сказал Икке, single responsobility principle также является хорошим способом разработки методов, потому что лучше понимать такие методы, как process_post и show_form, чем странное сочетание деревьев if else, которые впоследствии эволюционируют в дерево операторов if else. 1010 *

0 голосов
/ 20 июля 2011

В дальнейшем, если вы хотите использовать одну и ту же логику в двух разных контроллерах, вы можете использовать Command Pattern. Просто создайте команду и используйте ее в двух разных местах.

0 голосов
/ 09 июля 2011

Я говорю, что второй подход лучше.

Он придерживается принципа единой ответственности , и, как вы сами говорите, повторное использование кода проще.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...