Форма перевірки електронної пошти api


9

Який найкращий спосіб обробити перевірку електронної пошти на стороні сервера у формі API?
Чи можна його реалізувати десь у частині описаної нижче форми чи є інші варіанти?

 $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;
}

Відповіді:


5

Створіть функцію перевірки форми. Ось приклад використання вашої форми. Наприклад, скажімо, що ваш код форми знаходиться у функції, що називається 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
}
?>

Ця функція дозволить вам написати спеціальний код, щоб визначити, чи є значення, введені у ваші поля, дійсні чи ні. Ви також можете додати спеціальну функцію подання для вашої форми для виконання спеціального коду під час подання форми.

Докладніше про перевірку форм у Валідації форм , надсилання форм у Надсилання форм або прочитайте всю статтю для кращого розуміння API форм: Посібник із швидкого запуску API API


2
Також у Drupal є дуже надійна функція перевірки: api.drupal.org/api/drupal/includes--common.inc/function/…
codexmas

5

Замість того, щоб додати обробник перевірки форми до форми, ви можете додати обробник валідації до елемента форми, який потрібно перевірити: Використовуйте #element_validate , який приймає масив обробників перевірки, які будуть застосовані до елемента форми.

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

Обробник валідації отримує три аргументи: Елемент форми, який перевіряється, $form_stateі $formмасив для форми, що містить елемент форми. Обробник перевірки повинен викликати form_error () або form_set_error (), щоб повідомити про будь-яку помилку перевірки.

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.'));
  }
}

1
#element_validate - це не власна власність, а властивість Drupal. Шоу-код є чудовим, і він є коректною альтернативою тому, що пропонується з інших відповідей, включаючи той, що пропонує рішення, яке дійсне лише для модуля Webform.
kiamlaluno

Однією з переваг використання підходу @ nmeegama є те, що він робить ваш код набагато чіткішим, замість того, щоб мати все в одному великому валідаті ().
leymannx

1
Ще одна перевага використання рішення @ nmeegama полягає в тому, що поле можна повторно використовувати і в інших формах без необхідності повторної перевірки.
Супрія Раджгопаль

Ви також можете повторно використовувати код в іншому місці, що добре, якщо у вас однакова перевірка для декількох елементів.
mbomb007

3

Пояснено тут: 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.'));
}
?>

На пов'язаній сторінці показано рішення для модуля Webform.
kiamlaluno

0

Ви можете просто використовувати модуль Elements і просто використовувати 'emailfield' у властивості #type елемента форми, так:

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

Просто так просто з модулем елементів зробити власну перевірку простого поля електронної пошти не має сенсу, вам не доведеться винаходити колесо ...


0

Встановіть модуль « Електронна пошта» та закріпіть його за допомогою виправлення на коментарі 16. Потім використовуйте код у пов'язаному описі проблеми, щоб визначити поле електронної пошти із вбудованою валідацією:

$form['email'] = array(
    '#type' => 'email',
    '#title' => t('Email'),
    '#required' => TRUE,
    '#default_value' => "",
    '#description' => "Please enter your email.",
    '#size' => 20,
    '#maxlength' => 20,
  );

0

У Drupal 8 Це може бути підтверджено наступним кодом.

/**
 * {@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.'));
  }
}

Для цього існує інтерфейс з 8.7 https://www.drupal.org/node/2997196

Довідка: https://www.drupal.org/node/2912661


-1

Адреса електронної пошти може бути підтверджена за допомогою вашої перевірки форми

Якщо функція your_formвизначає вашу форму, тоді за замовчуванням перевірятиме обробник your_form_validateабо в іншому випадку ви також можете встановити її вручну

 $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'))
 }
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.