размещение на той же странице хорошей практики? - PullRequest
1 голос
/ 29 ноября 2010

В последнее время я читал много разных вещей, чтобы улучшить качество своего кодирования.

Мне интересно, будет ли хорошей практикой публиковать форму на одной и той же странице, я часто использовал этот тип фрагмента в своих текущих приложениях.

public function addAction(){
    $form = new Application_Form_Add();

    $this->view->form = $form;

    if(!$this->_request->isPost() && $form->isValid($this->_request->getParams())){
        $mapper = new Application_Model_ModelMapper();
        $model = new Application_Model_Model($form->getValues());

        if(!$mapper->save($model)){
            $this->view->messages('an error occurred etc ... ');
            return;     
        }

        $this->_helper->redirector->gotoRoute(array('id' => $model->id), 'model_view');
    }
}

, поэтому мое действие add представляет форму по запросу GET и обрабатывает ее по запросу POST.

Я натолкнулся на эту статью Мэтью Вейера О'Финни, я думаю, все могут согласиться с тем, что он один из гуру PHP на данный момент.В своем примере он делает два разных действия: одно, чтобы показать форму, другое для ее обработки.Поэтому, если форма не проверяется, он играет с $this->render, чтобы перевести представление формы.

Плохо ли отправлять форму на ту же страницу, и если да, то почему?

Ответы [ 3 ]

2 голосов
/ 29 ноября 2010

В целях удобочитаемости и удобства сопровождения кода два различных действия контроллера - несмотря на то, что они связаны с одной и той же формой - лучше разделить как две функции / сценарии.

Представьте, что было бы, если бы все операции CRUD были объединены в одну функцию / скрипт. Это будет грязно.

1 голос
/ 29 ноября 2010

В мое мнение Я предпочитаю использовать одно действие для него.Это держит все вещи вместе.Контроллер О'Пинни может выглядеть следующим образом:

  • addAction (использует saveAction для сохранения)
  • editAction (использует saveAction для сохранения)
  • saveAction (не отображает себя)

Наличие единого метода для всей логики сохранения / редактирования контроллера - единственная причина (предположение!) Для его выполнения и дополнительное действие.Круто, держит все в одном месте.Но: это требовало и редактирования, и добавления, чтобы иметь абсолютно одинаковую логику.Как только if/else как

public function saveAction()
{
    if($action == 'edit)
    {
        // edit logic 
    } else if($action == 'add')
    {
        // add logic
    }
}

будет иметь другую логику в зависимости от действия, это полностью использует идею одного действия.Поэтому, если вы знаете, что логика всегда одна и та же, и ее очень нелегко изменить, это способ сэкономить вам массу работы по кодированию:).

С другой стороны, если ваша логика добавления / редактированиянемного по-другому, я бы держал всю логику вместе, которая принадлежит друг другу:

  • addAction (печатает форму и сохраняет на POST)
  • editAction (печатает форму и сохраняет на POST)

Это может выглядеть как дублирование кода (а может и так), но тогда мои действия по редактированию / добавлению содержат около 3-6 строк кода.Но как только логика любого из них изменится, вы действительно узнаете это место.

Так что это личное мнение, я буду придерживаться отдельных действий, как только вещи станут более сложными.

(Примечание: к логике я обращаюсь к логике контроллера, в любом случае вся логика данных должна быть в модели)

1 голос
/ 29 ноября 2010

Не думаю, что это плохо.

Неважно, делаем ли мы это с одной и той же страницей и с другой страницей.

Оба пути правильны на своих местах.

использование одной страницы - это очень приятный способ, а использование двух страниц дает наш код управляемым способом.равны.

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