Interfejs API do sprawdzania poprawności wiadomości e-mail

9

Jaki jest najlepszy sposób obsługi sprawdzania poprawności wiadomości e-mail po stronie serwera w interfejsie API formularza?
Czy można go wdrożyć gdzieś w części formularza opisanego poniżej, czy też istnieją inne opcje?

 $form['address']['mail'] = array(
   '#type' => 'textfield',
   '#title' => t('E-mail'),
   '#required' => TRUE,
   '#default_value' => $subscription->mail,
   '#maxlength' => 255,
 ); 

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

 return $form;
}
JurgenR
źródło

Odpowiedzi:

5

Utwórz funkcję sprawdzania poprawności dla swojego formularza. Oto przykład z wykorzystaniem formularza. Powiedzmy na przykład, że kod formularza jest w funkcji o nazwie my_email:

<?php
function my_email() {
  $form = array();

  $form['address']['mail'] = array(
   '#type' => 'textfield',
   '#title' => t('E-mail'),
   '#required' => TRUE,
   '#default_value' => $subscription->mail,
   '#maxlength' => 255,
  ); 

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

  return $form;
}

function my_email_validate($form, &$form_state) {
  // YOUR CUSTOM VALIDATION CODE GOES HERE
 if (!valid_email_address($mail)) {
   form_set_error('submitted][email_address', t('The email address appears to be invalid.'));
   }
}

function my_email_submit($form, &$form_state) {
  // YOUR CUSTOM SUBMIT CODE GOES HERE
}
?>

Ta funkcja umożliwia napisanie niestandardowego kodu w celu ustalenia, czy wartości wprowadzone w polach są prawidłowe, czy nie. Możesz również dodać niestandardową funkcję przesyłania do formularza, aby wykonać niestandardowy kod podczas przesyłania formularza.

Przeczytaj więcej na temat sprawdzania poprawności formularzy w Sprawdzanie poprawności formularzy , przesyłanie formularzy w Przesyłanie formularzy lub przeczytaj cały artykuł, aby lepiej zrozumieć interfejs API formularzy: Szybki przewodnik po interfejsie API formularzy

Laxman13
źródło
2
Istnieje również bardzo solidna funkcja sprawdzania poprawności wbudowana w Drupal: api.drupal.org/api/drupal/includes--common.inc/function/…
codexmas
5

Zamiast dodawać moduł obsługi sprawdzania poprawności formularza do formularza, można dodać moduł obsługi sprawdzania poprawności do elementu formularza, który musi zostać sprawdzony: Użyj #element_validate , który akceptuje tablicę procedur sprawdzania poprawności, które zostaną zastosowane do elementu formularza.

$form['email'] = array(
  '#type' => 'textfield',
  '#title' => 'Email',
  '#required' => TRUE,
  '#element_validate' => array('myelement_email_validate')
);

Procedura sprawdzania poprawności otrzymuje trzy argumenty: sprawdzany element formularza $form_stateoraz $formtablica dla formularza zawierającego element formularza. Procedura sprawdzania poprawności powinna wywołać form_error () lub form_set_error (), aby zgłosić każdy błąd sprawdzania poprawności.

function myelement_email_validate($element, &$form_state, $form) {
  $value = $element['#value'];
  if (!valid_email_address($value)) {
    form_error($element, t('Please enter a valid email address.'));
  }
}
nmeegama
źródło
1
#element_validate nie jest właściwością niestandardową, ale właściwością Drupal. Kod show jest w porządku i jest prawidłową alternatywą dla tego, co zaproponowano na podstawie innych odpowiedzi, w tym sugerujących rozwiązanie, które jest poprawne tylko dla modułu Webform.
kiamlaluno
Jedną z zalet korzystania z podejścia @ nmeegama jest to, że sprawia, że ​​kod wygląda znacznie wyraźniej, zamiast mieć wszystko w jednym dużym sprawdzeniu poprawności ().
leymannx
1
Kolejną zaletą korzystania z rozwiązania @ nmeegama jest to, że pole może być ponownie użyte również w innych formach bez konieczności ponownej weryfikacji.
Supriya Rajgopal
Możesz także ponownie użyć kodu w innym miejscu, co jest miłe, jeśli masz taką samą weryfikację wielu elementów.
mbomb007,
3

Wyjaśniono tutaj: http://drupal.org/node/279127

<?php
$mail = $form_values['submitted_tree']['email_address'];
if (!valid_email_address($mail)) {
  form_set_error('submitted][email_address', t('The email address appears to be invalid.'));
}
?>
artfulrobot
źródło
Połączona strona pokazuje rozwiązanie modułu Webform.
kiamlaluno
0

Możesz po prostu użyć modułu Elements i po prostu użyć pola „email” we właściwości #type elementu formularza, podobnie jak to:

 $form['YOUR_FIELD_KEY'] = array(
    '#type' => 'emailfield',
    '#title' => t('Email'),
    '#size' => 20,
    '#maxlength' => 20,
    '#description' => t('Enter a valid email'),
    '#required' => TRUE,
  );

Tak łatwo z modułem elementów, aby niestandardowe sprawdzanie poprawności dla prostego pola e-mail nie miało sensu, nie trzeba wymyślać koła na nowo ...

svelandiag
źródło
0

Zainstaluj moduł pola e-mail i załataj go łatką w komentarzu 16. Następnie użyj kodu w powiązanym opisie problemu, aby zdefiniować pole e-mail z wbudowaną funkcją sprawdzania poprawności:

$form['email'] = array(
    '#type' => 'email',
    '#title' => t('Email'),
    '#required' => TRUE,
    '#default_value' => "",
    '#description' => "Please enter your email.",
    '#size' => 20,
    '#maxlength' => 20,
  );
zrozumiałem
źródło
0

W Drupal 8 Można to sprawdzić za pomocą następującego kodu.

/**
 * {@inheritdoc}
 */
public function validateForm(array &$form, FormStateInterface $form_state) {
  // Validate email
  if (!\Drupal::service('email.validator')->isValid($form_state->getValues()['email'])) {
     $form_state->setErrorByName('Email', $this->t('Email address is not a valid one.'));
  }
}

Jest do tego interfejs od 8.7 https://www.drupal.org/node/2997196

Odniesienie: https://www.drupal.org/node/2912661

miststudent2011
źródło
-1

Adres e-mail można zweryfikować za pomocą modułu sprawdzania poprawności formularza

Jeśli funkcja your_formdefiniuje formularz, wówczas domyślnym modułem sprawdzania poprawności będzie your_form_validatelub w przeciwnym razie można go ustawić ręcznie

 $form['#validate'] = array('callback_to_validate');


 function your_form_validate($form, $form_state){
   if(!filter_var($form_state['values']['mail'], FILTER_VALIDATE_EMAIL))
     form_set_error('email', t('Invalid Email Address'))
 }
Shoaib Nawaz
źródło