Какой элегантный способ обработки недопустимой формы в контроллере приложения MVC? - PullRequest
0 голосов
/ 08 декабря 2010

У меня есть пользовательское приложение / инфраструктура MVC, где каждое действие является функцией внутри класса контроллера.

У меня есть действие signup, которое отображает вид с формой, запрашивающей данные пользователя.При отправке он отправляет действие processSignup, которое проверяет данные и либо вставляет пользователя в базу данных и перенаправляет на страницу успеха, либо должно повторно отобразить исходное представление / форму с ошибками.

signup Действие запускает несколько запросов и передает различные данные для просмотра.Например, он должен получить список доступных стран, которые пользователь может выбрать в раскрывающемся списке, получить список предлагаемых имен пользователей на основе имени, введенного им в предыдущей форме, и извлечь другие данные из модели.

Я пытаюсь выяснить, как можно избежать повторения всех этих запросов и визуализации представления в моем действии processSignup в случае ошибки.Какой стандартный способ справиться с этими ситуациями?Действие signup получает данные POST из предыдущей формы, поэтому я не могу отправить форму регистрации себе и перейти на основе GET против POST.

Я мог бы просто вызвать signup функционирует напрямую и заставляет его принимать необязательный параметр, чтобы различать обычные запросы и запросы для недопустимых форм, но это кажется хакерским.Как другие фреймворки справляются с этим сценарием?Я использую PHP, но это скорее вопрос высокого уровня, чем специфический для языка.

1 Ответ

1 голос
/ 08 декабря 2010

Исключение дублирующегося кода, безусловно, не уникально для сред MVC. Стандартный подход состоит в том, чтобы просто создать приватную функцию, которую signup и processSignup вызывают перед рендерингом представления. Что-то вроде:

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

}

Что касается рендеринга вида signup, гибкость в MVC заключается в том, что вы можете повторно использовать представления. Ваша структура должна иметь способ явно выбирать представление в методе контроллера (например, $this->view = 'signup'). Таким образом, если ошибка возникает в processSignup, вы можете выбрать signup представление перед рендерингом.

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