이메일 확인 양식 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
}
?>

이 기능을 사용하면 사용자 정의 코드를 작성하여 필드에 입력 한 값이 유효한지 확인할 수 있습니다. 양식을 제출하는 동안 양식에 사용자 정의 제출 기능을 추가하여 사용자 정의 코드를 실행할 수도 있습니다.

Forms API에 대한 이해를 높이 려면 Forms Validation Forms 에서 양식 유효성 검증에 대해 자세히 알아 보거나 양식 제출에서 양식을 제출 하거나 전체 기사를 읽으십시오. Form API 빠른 시작 안내서


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의 접근 방식을 사용하는 이점 중 하나는 하나의 큰 validate ()로 모든 것을 갖는 대신 코드를 훨씬 명확하게 보이게한다는 것입니다.
leymannx

1
@nmeegama 솔루션을 사용하는 또 다른 이점은 재확인 할 필요없이 다른 형태로도 필드를 재사용 할 수 있다는 것입니다.
Supriya Rajgopal

다른 곳에서 코드를 재사용 할 수도 있습니다. 여러 요소에 대해 동일한 유효성 검사가있는 경우 유용합니다.
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

Elements 모듈을 사용하고 다음과 같이 양식 요소의 #type 속성에서 'emailfield'를 사용할 수 있습니다 .

 $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 모듈을 설치 하고 주석 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.