แบบฟอร์มการตรวจสอบอีเมล 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
}
?>

ฟังก์ชั่นนี้จะช่วยให้คุณสามารถเขียนรหัสที่กำหนดเองเพื่อตรวจสอบว่าค่าที่ป้อนในสาขาของคุณถูกต้องหรือไม่ คุณยังสามารถเพิ่มฟังก์ชั่นการส่งที่กำหนดเองสำหรับแบบฟอร์มของคุณเพื่อรันโค้ดที่กำหนดเองในขณะที่กำลังส่งแบบฟอร์ม

อ่านเพิ่มเติมเกี่ยวกับการตรวจสอบความถูกต้องของฟอร์มที่Validating Formsส่งแบบฟอร์มที่Submitting Formsหรืออ่านบทความทั้งหมดเพื่อความเข้าใจที่ดีขึ้นของ Forms API: Form API Quickstart Guide


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

คุณสามารถใช้โมดูลองค์ประกอบและใช้ 'อีเมล' ในคุณสมบัติ #type ขององค์ประกอบแบบฟอร์มเช่นนี้:

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

เพียงแค่นั้นด้วยโมดูลองค์ประกอบทำให้การตรวจสอบที่กำหนดเองสำหรับเขตข้อมูลอีเมลที่เรียบง่ายไม่สมเหตุสมผลคุณไม่จำเป็นต้องบูรณาการล้อ ...


0

ติดตั้งโมดูลEmail Fieldและทำการแก้ไขด้วยpatchในความคิดเห็นที่ 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'))
 }
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.