当前,我正在使用可渲染数组来生成带有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)。
答案 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',
];
否则,您可能希望改用textfield
或textarea
元素,然后在分解以逗号分隔的字符串后使用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,
]));
}