Лично я считаю, что каждая форма должна отправлять сообщения на свой собственный контроллер, как у вас. Это сохраняет код для обработки этой формы в одном месте. Проблема здесь в том, что вы хотите вернуться на исходную страницу при неудачной проверке. Но почему? Почему бы просто не перезапустить форму в целевом контроллере, как если бы на странице была одна форма?
Например, рассмотрим форму входа в систему, которая появляется на каждой странице сайта (возможно, потому что она есть в шаблоне / макете сайта). Он отправляет что-то вроде AuthController::loginAction()
. Если вход в систему не удается, вы обычно не отправляете его обратно на страницу, с которой он пришел. Вы оставляете его на странице входа в систему, предварительно заполнив форму из $_POST
, какой вы хотите (вероятно, имя пользователя, но не его пароль).
См. этот ответ для аналогичного обсуждения.
Обновление : Еще одна мысль об этом. Если вы действительно хотите обрабатывать обработку в двух разных контроллерах, чтобы держать его на странице, с которой он отправил форму, по крайней мере извлеките эту обработку формы в action helper . Таким образом, вы могли бы по крайней мере сохранить эту обработку форм DRY .
Обновление : Роб Аллен только что написал отличный пост в блоге "Форма в вашем макете" , в котором он описывает метод, использующий помощник действий с preDispatch()
метод, который создает и обрабатывает форму. Очень мило.