E-posta doğrulama formu api


9

Form API'sında sunucu tarafı e-posta doğrulamasını işlemenin en iyi yolu nedir?
Aşağıda açıklanan formun içinde bir yere uygulanabilir mi, yoksa başka seçenekler var mı?

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

Yanıtlar:


5

Formunuz için bir doğrulama işlevi oluşturun. Formunuzu kullanan bir örnek. Örneğin, form kodunuzun şöyle bir işlevde olduğunu varsayalım 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
}
?>

Bu işlev, alanlarınıza girilen değerlerin geçerli olup olmadığını belirlemek için özel kod yazmanıza olanak tanır. Ayrıca form gönderilirken formunuzun özel kod yürütmesi için özel bir gönderme işlevi de ekleyebilirsiniz.

En formları doğrulama hakkında daha fazla oku Sınamayan Formlar , en formlar göndererek form gönderme veya Formlar API daha iyi anlamak için tüm makaleyi okuyun: Form API Hızlı Başlangıç Kılavuzu



5

Forma bir form doğrulama işleyicisi eklemek yerine, form öğesine doğrulanması gereken bir doğrulama işleyicisi ekleyebilirsiniz: Form öğesine uygulanacak bir dizi doğrulama işleyicisi dizisini kabul eden #element_validate kullanın .

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

Doğrulama işleyici üç bağımsız değişkeni alır: yalıtım elemanı doğrulanan, $form_stateve $formyalıtım elemanı ihtiva eden form için dizi. Doğrulama işleyicisi herhangi bir doğrulama hatasını bildirmek için form_error () veya form_set_error () öğesini çağırmalıdır .

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 özel bir özellik değil, Drupal özelliğidir. Şov kodu gayet iyi ve yalnızca Webform modülü için geçerli bir çözüm önerisi de dahil olmak üzere diğer yanıtlardan önerilenlere geçerli bir alternatif.
kiamlaluno

@ Nmeegama'nın yaklaşımını kullanmanın avantajlarından biri, kodunuzun her şeyi büyük bir validate () kullanmak yerine çok daha net görünmesidir.
leymannx

1
@ Nmeegama'nın çözümünü kullanmanın bir başka avantajı da alanın yeniden doğrulanmasına gerek kalmadan başka şekillerde de kullanılabilmesidir.
Supriya Rajgopal

Kodu başka bir yerde yeniden kullanabilirsiniz, bu da birden fazla öğe için aynı doğrulamaya sahipseniz güzeldir.
mbomb007

3

Burada açıklanmıştır: 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.'));
}
?>

Bağlantı verilen sayfa Webform modülü için çözümü göstermektedir.
kiamlaluno

0

Yalnızca Elements modülünü kullanabilir ve form öğesinin #type özelliğinde 'e-posta alanını' kullanabilirsiniz, tıpkı şöyle:

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

Elements modülü ile bu kadar kolay, basit bir e-posta alanı için özel doğrulama yapın mantıklı değil, tekerleği yeniden icat etmek zorunda değilsiniz ...


0

E-posta Alanı modülünü yükleyin ve yorum 16'daki yama ile yapıştırın. Ardından, e-posta alanınızı yerleşik doğrulama ile tanımlamak için bağlantılı sorun açıklamasındaki kodu kullanın:

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

0

Drupal 8'de Aşağıdaki kod ile doğrulanabilir.

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

Bunun için 8.7'den beri arayüz var https://www.drupal.org/node/2997196

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


-1

E-posta adresi form doğrulama işleyicinizle doğrulanabilir

İşlev your_formformunuzu tanımlarsa, varsayılan doğrulama işleyicisi olur your_form_validateya da başka şekilde el ile de ayarlayabilirsiniz.

 $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'))
 }
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.