跳到内容

SubmitType 字段

编辑此页

一个提交按钮。

渲染为 button submit 标签
父类型 ButtonType
SubmitType

提示

通过在你的应用中运行此命令,可以获得此表单类型定义和继承的完整选项列表

1
2
# replace 'FooType' by the class name of your form type
$ php bin/console debug:form FooType

Submit 按钮有一个额外的方法 isClicked(),可让你检查是否使用此按钮提交了表单。当表单有多个提交按钮时,这尤其有用

1
2
3
if ($form->get('save')->isClicked()) {
    // ...
}

选项

validate

类型: boolean 默认值: true

将此选项设置为 false 以禁用浏览器执行的表单客户端验证。

继承的选项

attr

类型: array 默认值: []

如果想为按钮的 HTML 表示形式添加额外的属性,可以使用 attr 选项。它是一个关联数组,键为 HTML 属性。当需要为按钮设置自定义 class 时,这会很有用

1
2
3
4
5
6
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
// ...

$builder->add('save', SubmitType::class, [
    'attr' => ['class' => 'save'],
]);

disabled

类型: boolean 默认值: false

如果不希望用户能够点击按钮,可以将 disabled 选项设置为 true。使用此按钮将无法提交表单,即使绕过浏览器并手动发送请求(例如使用 cURL)也不行。

label

类型: stringTranslatableMessage 默认值: 标签从字段名称中“猜测”而来

设置将显示在按钮上的标签。标签也可以直接在模板中设置

1
{{ form_widget(form.save, { 'label': 'Click me' }) }}

label_format

类型: string 默认值: null

配置用作字段标签的字符串,以防未设置 label 选项。当使用关键字翻译消息时,这非常有用。

如果使用关键字翻译消息作为标签,你经常会为同一个标签获得多个关键字消息(例如 profile_address_streetinvoice_address_street)。这是因为标签是为字段的每个“路径”构建的。为了避免重复的关键字消息,你可以将标签格式配置为静态值,例如

1
2
3
4
5
6
7
8
// ...
$profileFormBuilder->add('address', AddressType::class, [
    'label_format' => 'form.address.%name%',
]);

$invoiceFormBuilder->add('invoice', AddressType::class, [
    'label_format' => 'form.address.%name%',
]);

此选项由子类型继承。使用上面的代码,两个表单的 street 字段的标签都将使用 form.address.street 关键字消息。

标签格式中有两个变量可用

%id%
字段的唯一标识符,由字段的完整路径和字段名称组成(例如 profile_address_street);
%name%
字段名称(例如 street)。

默认值 (null) 会生成字段名称的“人性化”版本

注意

label_format 选项在表单主题中进行评估。如果你自定义了表单主题,请确保更新你的模板。

translation_domain

类型: string 默认值: messages

这是将用于为此按钮呈现的任何标签或选项的翻译域。

label_translation_parameters

类型: array 默认值: []

label 选项的内容在显示之前会被翻译,因此它可以包含翻译占位符。此选项定义了用于替换这些占位符的值。

假设有以下翻译消息

1
2
# translations/messages.en.yaml
form.order.submit_to_company: 'Send an order to %company%'

你可以按如下方式指定占位符值

1
2
3
4
5
6
7
8
9
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
// ...

$builder->add('send', SubmitType::class, [
    'label' => 'form.order.submit_to_company',
    'label_translation_parameters' => [
        '%company%' => 'ACME Inc.',
    ],
]);

按钮的 label_translation_parameters 选项与其父选项的相同选项合并,因此按钮可以重用和/或覆盖任何父占位符。

attr_translation_parameters

类型: array 默认值: []

在显示之前,将翻译在 attr 选项中定义的 titleplaceholder 值的内容,因此它可以包含 翻译占位符。此选项定义了用于替换这些占位符的值。

假设有以下翻译消息

1
2
3
# translations/messages.en.yaml
form.order.id.placeholder: 'Enter unique identifier of the order to %company%'
form.order.id.title: 'This will be the reference in communications with %company%'

你可以按如下方式指定占位符值

1
2
3
4
5
6
7
8
9
$builder->add('id', null, [
    'attr' => [
        'placeholder' => 'form.order.id.placeholder',
        'title' => 'form.order.id.title',
    ],
    'attr_translation_parameters' => [
        '%company%' => 'ACME Inc.',
    ],
]);

子字段的 attr_translation_parameters 选项与其父选项的相同选项合并,因此子字段可以重用和/或覆盖任何父占位符。

row_attr

类型: array 默认值: []

添加到用于渲染表单类型行的元素的 HTML 属性的关联数组

1
2
3
$builder->add('body', TextareaType::class, [
    'row_attr' => ['class' => 'text-editor', 'id' => '...'],
]);

另请参阅

如果要将这些属性添加到表单类型小部件元素,请使用 attr 选项。

validation_groups

类型: array 默认值: null

当你的表单包含多个提交按钮时,你可以根据用于提交表单的按钮更改验证组。想象一下一个带有按钮的注册表单向导,用于前进到上一步或下一步

1
2
3
4
5
6
7
8
9
10
11
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
// ...

$form = $this->createFormBuilder($user)
    ->add('previousStep', SubmitType::class, [
        'validation_groups' => false,
    ])
    ->add('nextStep', SubmitType::class, [
        'validation_groups' => ['Registration'],
    ])
    ->getForm();

特殊的 false 确保在单击上一步按钮时不执行任何验证。当单击第二个按钮时,将验证“注册”中的所有约束。

另请参阅

你可以在如何根据提交的数据选择验证组中阅读更多关于此内容的信息。

表单变量

变量 类型 用法
clicked boolean 按钮是否被点击。
本作品,包括代码示例,根据 Creative Commons BY-SA 3.0 许可获得许可。
目录
    版本