Formulir validasi email api

9

Apa cara terbaik untuk menangani validasi email sisi server dalam bentuk API?
Bisakah itu diterapkan di suatu tempat di dalam formulir yang dijelaskan di bawah ini atau ada opsi lain?

 $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
sumber

Jawaban:

5

Buat fungsi validasi untuk formulir Anda. Berikut ini contoh menggunakan formulir Anda. Misalnya, katakan kode formulir Anda dalam fungsi yang disebut 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
}
?>

Fungsi ini akan memungkinkan Anda untuk menulis kode khusus untuk menentukan apakah nilai yang dimasukkan dalam bidang Anda valid atau tidak. Anda juga dapat menambahkan fungsi pengiriman kustom untuk formulir Anda untuk mengeksekusi kode kustom saat formulir sedang dikirim.

Baca lebih lanjut tentang memvalidasi formulir di Formulir Validasi , mengirimkan formulir di Formulir Mengirimkan atau membaca seluruh artikel untuk pemahaman yang lebih baik tentang Formulir API: Panduan API Quickstart Formulir API

Laxman13
sumber
2
Ada juga fungsi validasi yang sangat kuat yang dibangun ke dalam Drupal: api.drupal.org/api/drupal/includes--common.inc/function/…
codexmas
5

Alih-alih menambahkan penangan validasi formulir ke formulir, Anda bisa menambahkan penangan validasi ke elemen formulir yang perlu divalidasi: Gunakan #element_validate , yang menerima array penangan validasi yang akan diterapkan ke elemen formulir.

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

Penangan validasi menerima tiga argumen: Elemen formulir divalidasi, $form_statedan $formlarik untuk formulir yang berisi elemen formulir. Penangan validasi harus memanggil form_error () atau form_set_error () untuk melaporkan kesalahan validasi apa pun.

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
sumber
1
#element_validate bukan properti khusus, tetapi properti Drupal. Kode acara baik-baik saja, dan itu adalah alternatif yang valid untuk apa yang diusulkan dari jawaban lain, termasuk yang menyarankan solusi yang hanya valid untuk modul Webform.
kiamlaluno
Salah satu keuntungan menggunakan pendekatan @ nmeegama adalah membuat kode Anda terlihat lebih jelas, alih-alih memiliki semuanya dalam satu validate besar ().
leymannx
1
Keuntungan lain menggunakan solusi @ nmeegama adalah bahwa bidang tersebut dapat digunakan kembali dalam bentuk lain juga tanpa perlu divalidasi ulang.
Supriya Rajgopal
Anda juga dapat menggunakan kembali kode di tempat lain, yang bagus jika Anda memiliki validasi yang sama untuk banyak elemen.
mbomb007
3

Dijelaskan di sini: 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
sumber
Halaman yang ditautkan menunjukkan solusi untuk modul Webform.
kiamlaluno
0

Anda bisa menggunakan modul Elemen dan cukup menggunakan 'bidang email' di properti #type elemen formulir, seperti ini:

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

Semudah itu dengan modul elemen, buat validasi khusus untuk bidang email sederhana tidak masuk akal, Anda tidak perlu menemukan kembali roda ...

svelandiag
sumber
0

Instal modul Bidang Email dan tambal dengan tambalan pada komentar 16. Kemudian gunakan kode dalam deskripsi masalah yang ditautkan untuk menentukan bidang email Anda dengan validasi bawaan:

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

Alamat email dapat divalidasi dengan penangan validasi formulir Anda

Jika fungsi your_formmendefinisikan formulir Anda maka penangan validasi default akan your_form_validateatau Anda juga dapat mengaturnya secara manual

 $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
sumber