it-swarm.com.de

Wie verwende ich form_set_error () richtig?

In meinem Modul Drupal 7) habe ich ein Formular und seine Validierungshandler. Ich rufe mein Formular aus einer field.tpl.php mit print render(drupal_get_form('my_form')) auf; es funktioniert wie erwartet.

Das Problem liegt im Falle eines falschen Eingabewerts.

Vor dem Anzeigen der Fehlermeldung sind zwei falsche Übermittlungen erforderlich: Beim ersten Mal befindet sich ein roter Rand um meine falsche Eingabe, und beim zweiten Mal wird die Fehlermeldung angezeigt (mit dem roten Rand).

Also, was ist der richtige Weg, um form_set_error() zu verwenden?

8
druvik

Formularersteller sollten nicht in einer Vorlagendatei aufgerufen werden, da sie zu spät aufgerufen werden. Wenn Sie render(drupal_get_form('my_form')) aufrufen, wurde der Code ausgeführt, der die Fehlermeldungen rendert, und die vom Validierungshandler gemeldeten eventuellen Fehlermeldungen werden in der aktuellen Sitzung von drupal_set_message () gespeichert , der von form_set_error() aufgerufen wird.

Der Code zum Drucken der Fehlermeldung befindet sich in der Datei page.tpl.php .

<?php if ($breadcrumb): ?>
  <div id="breadcrumb"><?php print $breadcrumb; ?></div>
<?php endif; ?>

<?php print $messages; ?>

Der Code in drupal_set_message(), der die anzuzeigenden Nachrichten speichert, ist der folgende:

  if ($message) {
    if (!isset($_SESSION['messages'][$type])) {
      $_SESSION['messages'][$type] = array();
    }

    if ($repeat || !in_array($message, $_SESSION['messages'][$type])) {
      $_SESSION['messages'][$type][] = $message;
    }

    // Mark this page as being uncacheable.
    drupal_page_is_cacheable(FALSE);
  }
6
kiamlaluno

Sie sollten stattdessen form_set_error betrachten

wenn Sie ein Element wie dieses haben:

function my_custom_module_form() {
  $form = array();
  $form['my_element'] = array(
    '#type' => 'textfield',
    '#title' => 'My Text field',
    '#default_value' => 'Some default text.',
  );
  return $form;
}

tun Sie dies in Ihrer Validierungs-Rückruffunktion, wenn Sie feststellen, dass die Werte in $form_state['values'] sind nicht gültig

function my_custom_module_form_validate($form, &$form_state) {
  // Do some checking on $form_state['values'], if you don't like it.
  form_set_error('my_element', 'This is the error message that will be displayed.');
}
8
LSU_JBob

form_set_error() sollte in Ihrer hook_validate() Funktion aufgerufen werden, wie von LSU_JBob beantwortet.

1
Amin