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

#php #drupal-6 #drupal-fapi

#php #drupal-6 #drupal-fapi

Вопрос:

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

Проблема
У меня есть блок, который выводит форму через 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, содержащий ошибки формы, не очищается. Итак, я не знаю, где этот var сбрасывается — где-то с помощью другой функции forms api? — так что к тому времени, когда я вызываю ее в своем модуле или теме, она пуста.

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

Ответ №1:

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

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

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