Mẫu xác nhận e-mail api


9

Cách tốt nhất để xử lý xác thực e-mail phía máy chủ trong API biểu mẫu là gì?
Nó có thể được thực hiện ở đâu đó bên trong một phần của mẫu được mô tả dưới đây hoặc có các tùy chọn khác không?

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

Câu trả lời:


5

Tạo một chức năng xác nhận cho biểu mẫu của bạn. Dưới đây là một ví dụ sử dụng mẫu của bạn. Ví dụ: giả sử mã biểu mẫu của bạn nằm trong hàm gọi là 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
}
?>

Hàm này sẽ cho phép bạn viết mã tùy chỉnh để xác định xem các giá trị được nhập trong các trường của bạn có hợp lệ hay không. Bạn cũng có thể thêm chức năng gửi tùy chỉnh cho biểu mẫu của mình để thực thi mã tùy chỉnh trong khi biểu mẫu đang được gửi.

Đọc thêm về xác thực các biểu mẫu tại Xác thực biểu mẫu , gửi biểu mẫu tại Gửi biểu mẫu hoặc đọc toàn bộ bài viết để hiểu rõ hơn về API biểu mẫu: Hướng dẫn khởi động nhanh API biểu mẫu


2
Ngoài ra còn có một chức năng xác thực rất mạnh mẽ được tích hợp trong Drupal: api.drupal.org/api/drupal/includes--common.inc/feft/ phỏng
codexmas

5

Thay vì thêm trình xử lý xác thực mẫu vào biểu mẫu, bạn có thể thêm trình xử lý xác thực vào phần tử biểu mẫu cần xác thực: Sử dụng #element_validate , chấp nhận một mảng các trình xử lý xác thực sẽ được áp dụng cho phần tử biểu mẫu.

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

Trình xử lý xác nhận nhận được ba đối số: Phần tử biểu mẫu được xác thực, $form_state$formmảng cho biểu mẫu có chứa phần tử biểu mẫu. Trình xử lý xác nhận nên gọi form_error () hoặc form_set_error () để báo cáo bất kỳ lỗi xác thực nào.

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 không phải là thuộc tính tùy chỉnh, mà là thuộc tính Drupal. Mã chương trình là tốt và nó là một thay thế hợp lệ cho những gì được đề xuất từ ​​các câu trả lời khác, bao gồm cả giải pháp đề xuất một giải pháp chỉ hợp lệ cho mô-đun Webform.
kiamlaluno

Một trong những lợi thế của việc sử dụng phương pháp của @ nmeegama là nó làm cho mã của bạn trông rõ ràng hơn nhiều, thay vì có mọi thứ trong một xác thực lớn ().
leymannx

1
Một ưu điểm khác của việc sử dụng giải pháp của @ nmeegama là trường có thể được sử dụng lại dưới các hình thức khác mà không cần phải xác thực lại.
Supriya Rajgopal

Bạn cũng có thể sử dụng lại mã ở nơi khác, điều này thật tuyệt nếu bạn có cùng xác nhận cho nhiều yếu tố.
mbomb007

3

Giải thích tại đây: 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.'));
}
?>

Trang được liên kết đang hiển thị giải pháp cho mô-đun Webform.
kiamlaluno

0

Bạn chỉ có thể sử dụng mô-đun Phần tử và chỉ sử dụng 'trường email' trong thuộc tính #type của phần tử biểu mẫu, giống như sau:

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

Thật dễ dàng với mô-đun phần tử, làm cho xác thực tùy chỉnh cho một trường email đơn giản không có ý nghĩa, bạn không phải phát minh lại bánh xe ...


0

Cài đặt mô-đun Trường Email và vá nó bằng bản vá trên nhận xét 16. Sau đó, sử dụng mã trong mô tả sự cố được liên kết để xác định trường email của bạn với xác thực tích hợp:

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

-1

Địa chỉ email có thể được xác nhận với trình xử lý xác nhận mẫu của bạn

Nếu hàm your_formxác định biểu mẫu của bạn thì trình xử lý xác thực mặc định sẽ là your_form_validatehoặc nếu không, bạn cũng có thể đặt thủ công

 $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'))
 }
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.