使用Drupal 8验证多个电子邮件地址

时间:2019-05-10 12:16:39

标签: forms validation email drupal-8

当前,我正在使用可渲染数组来生成带有HTML 5电子邮件字段的表单。

该表格最初接受一个电子邮件地址。 需要对其进行修改以接受单独的电子邮件地址列表,并通过Drupals电子邮件字段验证。

当前代码为

$form['an_email_field'] = [
            '#type' => 'email',
            '#title' => $this->t('enter an email'),
            '#default_value' => 'hello@mail.com',
            '#attributes' =>['multiple']
]

attributes => ['multiple']属性将'multiple'添加到生成的HTML字段属性列表中,这意味着如果提供了多个电子邮件地址,HTML 5将接受输入。

但是,如果提供了多个电子邮件地址,则drupals电子邮件验证将失败。

使用'#type'=>'email'时是否可以使Drupal 8接受多个逗号分隔的电子邮件地址?

可以在不创建自定义验证器的情况下完成此操作吗?

注意 -如果可能的话,我想避免使用电子邮件以外的其他字段类型,因此除非需要通过某种方式来设置字段类型,否则不希望将'#type'=>'email'切换为'#type'=>'text' HTML)。

1 个答案:

答案 0 :(得分:0)

安装了Webform模块后,您只需使用webform_email_multiple元素即可。

$form['an_email_field'] = [
  '#type' => 'webform_email_multiple',
  '#title' => $this->t('enter an email'),
  '#default_value' => 'hello@mail.com',
];

否则,您可能希望改用textfieldtextarea元素,然后在分解以逗号分隔的字符串后使用email.validator服务自行进行元素或表单验证。 validateEmail函数在email元素上的作用如下:

$value = trim($element['#value']);
$form_state
  ->setValueForElement($element, $value);
if ($value !== '' && !\Drupal::service('email.validator')
  ->isValid($value)) {
  $form_state
    ->setError($element, t('The email address %mail is not valid.', [
    '%mail' => $value,
  ]));
}