EmailType字段

3.4 版本
维护中的版本

EmailType 字段是一个文本字段,使用 HTML5 的 <input type="email" /> 标记进行输出。

Rendered as
输出为
input 下属的 email 字段(它是一个文本框)
Inherited options
继承的选项
Parent type
父类型
TextType
Class
EmailType

继承的选项 

以下选项继承自 FormType:

data 

值类型: mixed 默认值: 默认为底层结构的那个字段。

当你创建一个表单时,每个字段显示的初始值,是表单的域数据(domain data,即,表单所绑定的域对象)中的对应属性。如果你要为表单,或为某个字段,来覆写这个初始值,可以这样设置data选项:

1
2
3
4
5
6
use Symfony\Component\Form\Extension\Core\Type\HiddenType;
// ...
 
$builder->add('token', HiddenType::class, array(
    'data' => 'abcdef',
));

Caution

在输出表单时,data 选项 总是 覆写从域数据(对象)中获得的值。 这表明,当表单要编辑一个已经存在的被持久化了的对象(persisted object)时,对象的(属性)值也会被覆写,在提交表单时,将导致表单丢失掉它的已经持久化了的(属性的)值(persited value)。

disabled 

值类型: boolean 默认值: false

如果你不希望用户修改某个字段的值,可以设置此选项为true。任何被提交的值将被忽略。

empty_data 

值类型: mixed

默认值是 '' (空串)。

本选项决定的是当提交过来的值是空(或丢失)时,该字段所 返回 的值是什么。在表单输出到view层时,若什么也不提供,它不会设置初始值。

这意味着它会帮你处理提交了空值的表单。例如,如果你希望当没有值被选中的时候, name 字段被显式地设置为 John Doe,可以像下面这样做:

1
2
3
4
$builder->add('name', null, array(
    'required'   => false,
    'empty_data' => 'John Doe',
));

这仍然会输出一个空框,但随着提交, John Doe 这个值就会被设置。使用 dataplaceholder 选项即可在输出的表单中显示这个初始值。

如果是复合(compound)表单,你可以把 empty_data 设为一个数组、对象或 closure。参考 如何为表单类配置空数据 一文以了解关于此选项的更多信息。

Note

若你希望为整个表单类设置 empty_data 选项,可参考 如何为表单类配置空数据 一文。

Caution

表单数据转换 仍然适用于 empty_data 值。这意味着空字符串将被扔为 null。使用自定义的 data transformer,如果你确实希望返回空字符串的话。

error_bubbling 

值类型: boolean 默认值: false,除非表单是 compound

若是 true,本字段的任何错误将被传入父级字段或表单。例如,如果在一个普通字段上设为 true,它的任何一个错误将被附着到主表单上,而不是此特定字段。

error_mapping 

值类型: array 默认值: array()

本选项允许你修改验证时的错误信息的目标。

假设你有一个自定义的名为 matchingCityAndZipCode() 的方法,用于验证city和zip code邮编是否匹配。不幸的是,你的表单中并没有一个 "matchingCityAndZipCode" 字段,因此 Symfony 所能做的全部,就是在表单顶部来输出错误信息。

通过自定义错误映射(error mapping),你可以做得更好:把 error 映射到 city 字段,以便它显示到其上方:

1
2
3
4
5
6
7
8
public function configureOptions(OptionsResolver $resolver)
{
    $resolver->setDefaults(array(
        'error_mapping' => array(
            'matchingCityAndZipCode' => 'city',
        ),
    ));
}

这里是映射时左右侧的规则:

  • 左侧包含的是属性路径;
  • 若生成的是一个针对类中的某个属性或方法的violation(验证失败),它的路径直接就是 propertyName;
  • 若生成的是一个针对 array 数组的键或是 ArrayAccess 对象的验证失败,属性路径则是 [indexName];
  • 通过拼接并将属性用dots(英文逗点)分隔,你可以构建嵌套的属性路径。例如: addresses[work].matchingCityAndZipCode;
  • 右侧包含的直接就是表单字段的name。

默认时,任何一个未被映射的属性之错误信息,不会被顶到(bubble up)父表单中。你可以在左侧使用逗点 (.) 来把全部未映射属性的错误给映射到一个特定字段。例如把这些错误映射到 city 字段,就用:

1
2
3
4
5
$resolver->setDefaults(array(
    'error_mapping' => array(
        '.' => 'city',
    ),
));

label 

值类型: string 默认值: The label is "guessed" from the field name

这是要设置字段输出时用到的label。设置为 false 将抑制 label。label 也可直接在模板中设置:

1
{{ form_label(form.name, 'Your name') }}
1
2
3
4
echo $view['form']->label(
    $form['name'],
    'Your name'
);

label_attr 

值类型: array 默认值: array()

<label> 元素设置 HTML 属性,在输出字段 label 时将会用到。这是个关联数组,以 HTML 属性作为键。这个属性也可直接在模板中设置:

1
2
3
{{ form_label(form.name, 'Your name', {
       'label_attr': {'class': 'CUSTOM_LABEL_CLASS'}
}) }}
1
2
3
4
5
echo $view['form']->label(
    $form['name'],
    'Your name',
    array('label_attr' => array('class' => 'CUSTOM_LABEL_CLASS'))
);

label_format 

值类型: string 默认值: null

配置用作字段的 label 的字符串,如果 label 选项未配置的话。当使用 关键字翻译源 时这很有用。

如果你就是把 keyword translation messages(关键字翻译源) 用作 label,你常会止步于多个关键字条目被用于同一 label (如 profile_address_street, invoice_address_street)。这是因为 label 是安排给字段的每一个“路径(path)”的。要避免关键字翻译源的重复,你可以把 label format 配置为一个静态值,比如:

1
2
3
4
5
6
7
8
// ...
$profileFormBuilder->add('address', new AddressType(), array(
    'label_format' => 'form.address.%name%',
));
 
$invoiceFormBuilder->add('invoice', new AddressType(), array(
    'label_format' => 'form.address.%name%',
));

本选项被子类型继承。有了上面的代码,两个表单的 street 字段都会使用 form.address.street 关键字翻译源了。

在label format中有两个变量可用:

%id%
字段的唯一标识符,由该字段的完整路径及其name组成 (即 profile_address_street);
%name%
字段的name (即 street)。

默认值 (null) 会令字段名称产生一个 "humanized" 人类可读版本

Note

label_format 选项在表单主题(form theme)中被计算出来。若你 自定义表单主题,应确保更新模板。

mapped 

值类型: boolean 默认值: true

当对象被读写时,若你希望字段被忽略,可以设置 mapped 选项为 false.

required 

值类型: boolean 默认值: true

若是true,HTML5 required attribute 即会输出。对应的 label 亦将连同 required class 而输出。

这是浅表的选项,且独立于表单验证之外。最好是,如果你用 Symfony 的字段类型猜测,那么此选项的值将从你的验证信息中被猜出来。

Note

required 选项也会影响每个字段中的空值将被如何操作。更多细节参考 empty_data 选项。

trim 

值类型: boolean 默认值: true

如果是 true,在数据进行绑定时(data bound),提交的字符串值中的空格将通过 trim 函数而去除。这可以确保当一个提交的数据有空格时,将会在此值被合并入底层对象之前,被清除掉。

本文,包括例程代码在内,采用的是 Creative Commons BY-SA 3.0 创作共用授权。

登录symfonychina 发表评论或留下问题(我们会尽量回复)