Форма перенаправления при проверке не удалась - PullRequest
2 голосов
/ 23 июня 2010

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

Я попробовал следующее в моей функции form_validate.

// Check if there were any errors.
$errors = form_set_error();
if (!empty($errors)) {
  drupal_goto(arg(0));
}

Страница назначения, очевидно, одинакова, за исключением того, что все аргументы, кроме первого, удаляются. Проблема в том, что Drupal забывает о предыдущем состоянии формы и об ошибках, которые были вызваны функцией form_validate.

Я также пытался изменить значение #redirect в моей функции form_validate, но безрезультатно.

Есть предложения?

Ответы [ 2 ]

1 голос
/ 23 июня 2010

Вы оказались в плохой ситуации. AFAIK, вы не можете перенаправить без потери $ form_state. Перенаправление не сработает, если форма не будет отправлена, поэтому, если форма не проверена, вы не уйдете далеко.

Я не знаю, как вы настраиваете свой код, но мне кажется, что вам лучше настроить переменную в $form_state и использовать ее, чтобы определить, следует ли вам скрывать / отображать результаты.

Альтернативный вариант - сохранить $form_state в глобальном $_SESSION['batch_form_state'], чтобы использовать его при инициализации формы. Я не пробовал раньше, и он немного хакерский, но он должен работать.

0 голосов
/ 23 июня 2010

Вы можете сохранить данные формы, если они не большие, в $_SESSION.Затем проверьте, существует ли он после перенаправления.

Я не знаком с Drupal, но вы должны иметь доступ к отфильтрованным значениям формы.Таким образом, вместо проверки с полями $_POST вы проверяете с сохраненными значениями $_SESSION.

упрощенный пример

session_start();

// ... Previous Validation

// Check if there were any errors.
$errors = form_set_error();
if (!empty($errors)) {
    $_SESSION['form_state'] = $form_state;
    drupal_goto(arg(0));
}

после перенаправления

session_start();

$form_state = $_SESSION['form_state']);
unset($_SESSION['form_state']);

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