ई-मेल सत्यापन फॉर्म एपी


9

फॉर्म एपीआई में सर्वर साइड ई-मेल सत्यापन को संभालने का सबसे अच्छा तरीका क्या है?
क्या इसे नीचे वर्णित फॉर्म के भाग के अंदर कहीं लागू किया जा सकता है या अन्य विकल्प हैं?

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

यह फ़ंक्शन आपको यह निर्धारित करने के लिए कस्टम कोड लिखने की अनुमति देगा कि आपके फ़ील्ड में दर्ज किए गए मान मान्य हैं या नहीं। आप फॉर्म जमा करते समय कस्टम कोड को निष्पादित करने के लिए अपने फॉर्म के लिए एक कस्टम सबमिट फ़ंक्शन भी जोड़ सकते हैं।

प्रपत्रों को मान्य करने के बारे में और पढ़ें , फ़ॉर्म जमा करने के फॉर्म जमा करें या फ़ॉर्म एपीआई की बेहतर समझ के लिए पूरा लेख पढ़ें: फॉर्म एपीआई क्विकार्टार्ट गाइड


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 प्रॉपर्टी है। शो कोड ठीक है, और यह अन्य उत्तरों से प्रस्तावित के लिए एक वैध विकल्प है, जिसमें एक समाधान का सुझाव देना शामिल है जो केवल वेबफॉर्म मॉड्यूल के लिए मान्य है।
kiamlaluno

@ Nmeegama के दृष्टिकोण का उपयोग करने के लाभों में से एक यह है कि यह आपके कोड को एक बड़े सत्यापन () में सब कुछ होने के बजाय अधिक स्पष्ट दिखता है।
लयमनक्स

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

लिंक किया गया पृष्ठ वेबफ़ॉर्म मॉड्यूल के लिए समाधान दिखा रहा है।
kiamlaluno

0

आप बस तत्वों का उपयोग कर सकते हैं और बस इस तरह से, तत्व के # स्वरूप में 'emailfield' का उपयोग कर सकते हैं :

 $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 Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.