it-swarm.com.de

form_set_error Fehler nach ungültiger Formularübermittlung nicht angezeigt

Ich habe mit meinem benutzerdefinierten Modul ein Formular erstellt. Beim Validierungshandler rufe ich form_set_error() auf, aber es werden keine Fehlermeldungen angezeigt.

Außerdem habe ich mehrere Felder als '#required' => true Markiert. muss ich sie manuell validieren? Ich dachte Drupal wird sie automatisch validieren und Fehlermeldungen anzeigen. Ich sehe jedoch keine Fehlermeldung für sie, wenn ich ungültige Daten übermittle (d. H. Keine Werte für die Standardfelder angeben).

Dies ist der Code in der Implementierung von hook_menu(), der den Rückruf für die Seite definiert, die das Formular enthält.

function myModule_menu() {
  $menu['user/signup'] = array(
    'title' => 'Signup',
    'description' => 'Sign Up',
    'page callback' => 'drupal_get_form',
    'page arguments' => array('myModule_signup'),
    'access callback' => TRUE,
  );

    /// Others
}

Der Rest des Codes ist der folgende.

function myModule_signup($form, &$form_state) {
  $form['user_email'] = array(
    '#type' => 'textfield',
    '#size' => 15, 
    '#required' => true
  );

  $form['user_name'] = array(
    '#type' => 'textfield',
    '#size' => 15,
    '#required' => true
  );

  $form['user_passwd1'] = array(
    '#type' => 'password',
    '#size' => 15,
    '#required' => true
  );

  $form['user_passwd2'] = array
        (
    '#type' => 'password',
    '#size' => 15,
    '#required' => true
  );

  $form['user_gender'] = array(
    '#type' => 'select',
    '#options' => array('male', 'female')
    // '#size' => 15,
    // '#required' => true
  );

  $form['user_age'] = array
        (
    '#type' => 'select',
    '#options' => range(18, 26),
    // '#size' => 15,
    // '#required' => true
  );

  $form['user_country'] = array(
    '#type' => 'select',
    '#options' => array('Bangladesh', 'USA'),
  );

  $form['user_state'] = array(
    '#type' => 'select',
    '#options' => array('Dhaka', 'Chittagong', 'Mymensing'),
  );

  $form['submit'] = array(
    '#type' => 'submit',
    '#value' => t('Sign Up')
  );

  return $form;
}

function myModule_signup_validate($form, &$form_state) {
  $formValues = $form_state['values'];
  if (empty($formValues['user_email'])) {
    form_set_error('user_email', t('Email can not be empty'));
    dsm('I can see this message...');
  }
}

Außerdem rufe ich <?php print $messages; ?> In der Datei page.tpl.php Meines benutzerdefinierten Themas auf.

4
Shafiul

Ich habe ein schnelles Testmodul mit Ihrem Code erstellt und auch keine Fehlermeldungen erhalten. Das Problem mit der Fehlermeldung wurde behoben, als ich jedem Element in Ihrem Formulararray Felder mit dem Titel "#title" hinzufügte. Drupal verwendet diese, um herauszufinden, welche Nachrichten angezeigt werden sollen.

Der Grund, warum die form_set_error-Nachricht nicht gesetzt wird, ist, dass drupal höchstens eine Fehlermeldung pro Feld anzeigt und bereits erkennt, dass das Feld user_email erforderlich ist, und aus diesem Grund eine eigene Fehlermeldung festlegt Wenn Sie eine zusätzliche Validierung wünschen, müssen Sie nicht nur das Vorhandensein des Felds überprüfen und auch einige fehlerhafte Daten übergeben.

9
Daniel Yule

form_set_error() funktioniert nur im Kontext eines Formularvalidierungshandlers. Es ist zu spät, um einen Fehler festzulegen, wenn der Übermittlungshandler ausgeführt wurde.

Drupal übernimmt definitiv die Validierung für #required - Felder für Sie, daher sollten Sie die Fehlermeldungen erhalten. Wenn Sie das Formular jedoch zu spät im Seitenerstellungsprozess erstellen, werden die Überprüfungsnachrichten für eine Seite verzögert. Dies könnte erklären, was in Ihrem Fall passiert.

Wenn Sie das Formular mit drupal_get_form() erstellen, stellen Sie sicher, dass Sie es in einer Moduldatei und nicht in einer Vorlagendatei ausführen. Dies ist normalerweise die Ursache für dieses Problem. Ich denke, Sie würden es auch in einer Vorverarbeitungsfunktion auf Themenebene schaffen, aber das habe ich nicht versucht.

4
Clive
function myModule_signup_validate($form, &$form_state) {
  $formValues = $form_state['values']['user_email'];
  if (empty($formValues)) {
    form_set_error('user_email', t('Email can not be empty'));
  }
}

oder

function myModule_signup_validate($form, &$form_state) {
  $formValues = $form_state['values']['user_email'];
  if ($formValues === " ") {
    form_set_error('user_email', t('Email can not be empty'));
  }
}

Dies ist die richtige Funktion, um Ihre Frage zu validieren

0