Drupal 6: где я могу получить доступ к ошибкам формы, возможно, через form_get_errors (), перед выводом формы? - PullRequest
0 голосов
/ 27 апреля 2011

Как обычно, я думал, что что-то в API форм Drupal будет простым ... о чем я думал?

Проблема
У меня есть блок, который выводит форму через drupal_get_form (). Каким-то образом в функции отображения блока я хочу проверить, не прошла ли проверка формы (т.е. есть ли какие-либо ошибки, которые были установлены функцией form_set_error () в функции проверки моей формы).

Пока пробовал ...

  • проверка $_SESSION['messages']['error'] в функции отображения блока - но они к тому времени исчезли
  • проверка $_POST в функции отображения блока - здесь ничего полезного
  • проверка form_get_errors() в mymodule_preprocess_page() - пусто
  • проверка form_get_errors() в mytheme_preprocess_page() - пусто

Меня смущают мои звонки на form_get_errors () , который пуст. Он вызывает form_set_error () без аргументов - что оставляет $reset = FALSE, поэтому статическая переменная, содержащая ошибки формы, не очищается. Так что я не знаю, где этот VAR сбрасывается - где-то с помощью функции API других форм? - так что к тому времени, когда я вызову его в моем модуле или теме, он станет пустым.

помощь
Итак, кто-нибудь знает, в какой момент (функции предварительной обработки?) Я могу вызвать form_get_errors() до очистки статической переменной? Или есть другая идея, как проверить ошибки формы в блоке, который отображает форму? (Между прочим - я вполне уверен, что смог бы легко проверить это, как только я нахожусь внутри своей функции, которую вызывает drupal_get_form() ... но мне нужно знать об ошибках в функции отображения включающего блока.)

1 Ответ

0 голосов
/ 28 апреля 2011

Это ужасно, так как все вылезают, но это должно сработать.

$form['#validate'][] = '_error_preservation_helper';

...
function _error_preservation_helper($form, &$form_state) {
  $GLOBALS['_error_preservation_helper'] = form_get_error();
  return true;
}
...