2010-09-30 2 views
0

Итак, у меня есть форма на странице A, которая отправляется на странице B. После проверки формы на странице B она должна перенаправить на страницу A и показать форму с помощью возможные ошибки.Объект Persist Zend Form после перенаправления

Каков наилучший способ достичь этого? Является ли разумным временное размещение всего объекта формы в сеансе? Или есть более элегантное решение?

ответ

1

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

3

Почему бы не проверить его на странице A, а затем переслать на страницу B, если это действительно так? Таким образом, вам не нужно делать никаких уродливых хаков.

+0

Страница А - это страница, которая содержит функциональные возможности, недоступные при отсутствии входа в систему, поэтому форма входа в систему встроена на эту страницу. Фактическая проверка этой формы обрабатывается на странице B, хотя. Мне кажется неправильным, что у меня есть 2 действия, которые обрабатывают одну и ту же форму. – sander

0

Мне кажется, что страница А является преступником здесь.

Вместо того, чтобы отображать форму входа на странице А, когда пользователь не вошел в систему, вы можете сохранить URL-адрес страницы A в сеансе, а затем перенаправить на страницу входа (единственная!) (Страница B, справа?). , обрабатывается чем-то вроде AuthController::loginAction().

При неудачной проверке вы держите его там на странице входа, отображая ошибки проверки и форму. При успешной проверке/регистрации вы проверяете сеанс, чтобы увидеть, есть ли там сохраненный URL. Если да, отправьте его туда. Если нет, отправьте его в выбранное вами место, либо на страницу своего профиля, либо на домашнюю страницу, либо на какую-либо страницу с включенным сообщением.

Посмотрите, что я имею в виду?

+0

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

+0

Это довольно распространенный рабочий процесс: «Извините, сначала требуется вход». за которым следует перенаправление на страницу входа; Я подозреваю, что пользователь поймет. Но если вы должны отобразить форму на странице A, даже если проверка не удалась, тогда я думаю, что вы застряли в подходах, которые вы уже отметили. Но они оба чувствуют себя немного неуклюжими для меня, требуя контрольных проверок для сеансовых варов или для обработки формы. Если вы выполняете обработку формы в двух действиях, вы можете хотя бы использовать помощник действий, чтобы немного сохранить этот код [DRY] (http://en.wikipedia.org/wiki/Don%27t_repeat_yourself). –

+0

** Обновление **: В этом была другая мысль. Если вы действительно хотите обрабатывать обработку в двух разных контроллерах, чтобы удержать его на странице, с которой он разместил форму, по крайней мере, извлечь эту обработку формы в [помощник по действию] (http://framework.zend.com /manual/en/zend.controller.actionhelpers.html).Таким образом, вы могли бы хотя бы сохранить эту форму обработки [DRY] (http://en.wikipedia.org/wiki/Don%27t_repeat_yourself). См. [Аналогичное обсуждение] (http://stackoverflow.com/questions/3876877/zend-framework-post-to-different-action-then-return-to-original-action-if-fails/3878814#3878814). –

0

Zend_Form имеет такие методы, как getMessages, getErrorMessages и setErrors, setErrorMessages и так далее. Вы можете попробовать сделать это таким образом - никогда не пробовали, но теоретически должны работать:

  1. На странице B после неудачной проверки валидации в журнале проверки.
  2. Переадресация на страницу A.
  3. Перед формой рендеринга проверьте, есть ли в сеансе сообщения, если они есть, установите их в форму.
  4. Render form - если сообщение установлено, они будут сгенерированы Errors декоратором.
Смежные вопросы