CollectionType领域
编辑本页警告:您正在浏览的文档欧宝官网下载appob娱乐下载Symfony 4.1,现已不再维护。
读本页的更新版本用于Syob娱乐下载mfony 6.2(当前稳定版本)。
TextType填充数组的字段电子邮件
值。在更复杂的例子中,您可以嵌入整个表单,这在创建公开一对多关系的表单时非常有用(例如,您可以从一个产品中管理许多相关的产品照片)。
呈现为
取决于entry_type选项
选项
继承的选项
父类型
FormType
类
CollectionType
请注意
如果使用Doctrine实体的集合,请特别注意allow_add,allow_delete而且by_reference选项。中也可以看到完整的示例如何嵌入一个集合的形式篇文章。
电子邮件字段,该字段对应于电子邮件地址数组。在表单中,您希望将每个电子邮件地址作为其自己的输入文本框公开:
12 3 4 5 6 7 8 9 10 11 12
使用ob娱乐下载\组件\形式\扩展\核心\类型\CollectionType;使用ob娱乐下载\组件\形式\扩展\核心\类型\EmailType;/ /……$构建器->add (“电子邮件”, CollectionType::类,//数组中的每个条目都是一个"email"字段“entry_type”= > EmailType::类,//这些选项被传递给每个"email"类型“entry_options”= > [“attr”= > [“类”=>“邮箱”],],]);
最简单的渲染方法是一次性渲染:
1
{{form_row(form.email)}}
一个更灵活的方法是这样的:
1 2 3 4 5 6 7 8 9 10 11
{{form_label(form.email)}}{{form_errors(form.email)}}<ul>{%为form中的emailField。电子邮件%}<李>{{form_errors(emailField)}}{{form_widget(emailField)}}李>{%endfor%}ul>
在这两种情况下,除非您的电子邮件
数据数组已经包含一些电子邮件。
在这个简单的示例中,仍然无法添加新地址或删除现有地址。方法可以添加新地址allow_add选项(以及可选的原型选项)(参见下面的示例)。从电子邮件
数组是可行的allow_delete选择。
allow_add设置为真正的
,然后如果提交了任何无法识别的项目,它们将被无缝添加到项目数组中。这在理论上是很好的,但在实践中要使客户端JavaScript正确需要付出更多的努力。
在前面的示例中,假设从电子邮件
数据数组。在这种情况下,将呈现两个输入字段,看起来像这样(取决于你的表单名称):
1 2
<输入类型=“电子邮件”id=“form_emails_0”的名字=“形式(电子邮件)[0]”价值=“foo@foo.com”/><输入类型=“电子邮件”id=“form_emails_1”的名字=“形式(电子邮件)[1]”价值=“bar@bar.com”/>
要允许您的用户添加另一个电子邮件,只需设置allow_add来真正的
并且-通过JavaScript -呈现另一个字段的名称形式(电子邮件)[2]
(以此类推,会有越来越多的字段)。
为帮助简化此操作,请设置原型选项真正的
允许你呈现一个“模板”字段,然后你可以在你的JavaScript中使用它来帮助你动态地创建这些新字段。渲染的原型字段看起来像这样:
1 2 3 4 5
<输入类型=“电子邮件”id=“form_emails___name__”的名字=“形式(电子邮件)(__name__)”价值=""/>
通过替换__name__
有一些独特的值(例如:2
),您可以在表单中构建并插入新的HTML字段。
使用jQuery,一个简单的示例可能如下所示。如果你一次性渲染你的集合字段(例如。form_row (form.emails)
),那么事情就更容易了,因为data-prototype
属性会自动为你呈现(略有不同-见下面的注释),你所需要的是以下JavaScript代码:
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
/ / add-collection-widget.jsjQuery (文档时(函数(){jQuery (“.add-another-collection-widget”) .click (函数(e){varlist = jQuery(jQuery(这) .attr (“数据一览表”));//尝试找到列表的计数器或使用列表的长度varCounter = list.data(“widget-counter”) | list.children().length;//获取原型模板varnewWidget = list.attr(“data-prototype”);//替换原型id和名称中的"__name__//电子邮件中唯一的数字//结束名称属性看起来像name="contact[email][2]"newWidget = newWidget.replace(/ __name__ / g、计数器);//增加计数器计数器+ +;//并存储它,如果允许删除小部件,则不能使用长度list.data (“widget-counter”、计数器);//创建一个新的列表元素并将其添加到列表中varjQuery(list.attr(“data-widget-tags”) . html (newWidget);newElem.appendTo(列表);});});
并按如下方式更新模板:
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
{{form_start(form)}}{#……#}{#在data-prototype属性上存储原型<ulid=“email-fields-list”data-prototype="{{form_widget(form.email .vars.prototype)|e}}"data-widget-tags="{{''|e}}">{%为form中的emailField。电子邮件%}<李>{{form_errors(emailField)}}{{form_widget(emailField)}}李>{%endfor%}ul><按钮类型=“按钮”类=“add-another-collection-widget”数据表格=“# email-fields-list”>添加另一封邮件按钮>{#……#}{{form_end(form)}}<脚本src=“add-collection-widget.js”>脚本>
提示
如果您要一次呈现整个集合,则原型将自动在data-prototype
元素的属性(例如:div
或表格
)围绕着你的收藏。唯一的区别是整个“表单行”都是为您呈现的,这意味着您不必像上面所做的那样将其包装在任何容器元素中。
布尔默认的:假
如果设置为真正的
,则如果未识别的项提交到集合,则它们将作为新项添加。结束数组将包含现有项以及提交数据中的新项。有关详细信息,请参阅上面的示例。
的原型选项可以用来帮助呈现一个原型项,可以使用JavaScript在客户端动态创建新的表单项。有关更多信息,请参阅上面的示例和如何嵌入一个集合的形式.
谨慎
如果您正在嵌入整个其他表单以反映一对多的数据库关系,则可能需要手动确保这些新对象的外键设置正确。如果你使用Doctrine,这不会自动发生。更多细节请参见上面的链接。
布尔默认的:假
如果设置为真正的
,则如果提交的数据中不包含现有项,则该项将正确地从最终项数组中缺席。这意味着您可以通过JavaScript实现一个“delete”按钮,它可以简单地从DOM中删除一个表单元素。当用户提交表单时,表单在提交的数据中缺失意味着它将从最终数组中删除。
有关更多信息,请参见如何嵌入一个集合的形式.
谨慎
在嵌入对象集合时使用此选项时要小心。在这种情况下,如果删除任何嵌入的表单,则它们将将正确地从最终对象数组中缺失。但是,根据您的应用程序逻辑,当删除其中一个对象时,您可能希望删除它,或者至少删除它对主对象的外键引用。这些都不是自动处理的。有关更多信息,请参见如何嵌入一个集合的形式.
布尔或可调用的
默认的:假
如果要显式地从表单中删除完全为空的集合项,则必须将此选项设置为真正的
.属性时,才会删除现有集合项allow_delete选择启用。否则将保留空值。
谨慎
的delete_empty
选项仅在规范化值为时删除项零
.如果嵌套entry_type是复合表单类型,必须设置要求
选项假
或设置empty_data
选项零
.这两个选项都可以在内部设置entry_options.阅读有关表单的empty_data选项来了解为什么这是必要的。
只有规范化值为时,才会从集合中删除值零
.但是,您也可以将选项值设置为一个可调用对象,它将对提交的集合中的每个值执行。如果可调用对象返回真正的
时,该值将从集合中移除。例如:
1 2 3 4 5 6 7 8 9
使用ob娱乐下载\组件\形式\扩展\核心\类型\CollectionType;/ /……$构建器->add (“用户”, CollectionType::类,/ /……“delete_empty”=>函数(用户$用户= null){返回零===$用户||空($用户->getFirstName ());}));
在复合表单类型中使用可调用对象特别有用,因为复合表单类型可以定义复杂的条件,将其视为空的。
数组默认的:[]
类中指定的表单类型所传递的数组entry_type选择。例如,如果您使用ChoiceType作为你的entry_type选项(例如,对于下拉菜单的集合),那么您至少需要传递选择
底层类型的选项:
12 3 4 5 6 7 8 9 10 11 12 13 14 15
使用ob娱乐下载\组件\形式\扩展\核心\类型\CollectionType;使用ob娱乐下载\组件\形式\扩展\核心\类型\ChoiceType;/ /……$构建器->add (“favorite_cities”, CollectionType::类,“entry_type”= > ChoiceType::类,“entry_options”= > [“选择”= > [纳什维尔的=>纳什维尔的,“巴黎”=>“巴黎”,“柏林”=>“柏林”,“伦敦”=>“伦敦”,],],]);
字符串默认的:ob娱乐下载\\组件\\形式\\扩展\\核心\\类型\\ TextType
这是这个集合中每个项的字段类型(例如。TextType
,ChoiceType
等等)。例如,如果您有一个电子邮件地址数组,则可以使用EmailType.如果你想嵌入一些其他表单的集合,将表单类型类作为这个选项传递(例如:MyFormType::类
).
布尔默认的:真正的
属性时,此选项非常有用allow_add选择。如果真正的
(如果allow_add也真正的
),一个特殊的“prototype”属性将是可用的,这样你就可以在你的页面上呈现一个新元素应该是什么样子的“模板”示例。的的名字
属性为__name__
.这允许你通过JavaScript添加一个“添加另一个”按钮,读取原型,替换__name__
使用一些唯一的名称或数字,并在表单中呈现它。提交时,它将被添加到您的底层数组中,因为allow_add选择。
方法来呈现原型字段原型
集合字段中的变量:
1
{{form_row(form.email .vars.prototype)}}
注意,你真正需要的是“小部件”,但取决于你如何呈现你的表单,拥有整个“表单行”对你来说可能更容易。
提示
属性上的原型表单行自动可用data-prototype
元素的属性(例如:div
或表格
)围绕着你的收藏。
有关如何实际使用此选项的详细信息,请参见上面的示例以及如何嵌入一个集合的形式.
混合默认的:零
允许您为原型定义特定的数据。添加的每一行最初都将包含此选项设置的数据集。缺省情况下,为所有条目配置的数据带有entry_options选项将被使用。
1 2 3 4 5 6 7 8 9 10
使用ob娱乐下载\组件\形式\扩展\核心\类型\CollectionType;使用ob娱乐下载\组件\形式\扩展\核心\类型\TextType;/ /……$构建器->add (“标签”, CollectionType::类,“entry_type”= > TextType::类,“allow_add”=>真正的,“原型”=>真正的,“prototype_data”=>“新的标签占位符”]);
呈现为 | 取决于entry_type选项 |
选项 | |
继承的选项 | |
父类型 | FormType |
类 | CollectionType |
请注意
如果使用Doctrine实体的集合,请特别注意allow_add,allow_delete而且by_reference选项。中也可以看到完整的示例如何嵌入一个集合的形式篇文章。
电子邮件字段,该字段对应于电子邮件地址数组。在表单中,您希望将每个电子邮件地址作为其自己的输入文本框公开:
12 3 4 5 6 7 8 9 10 11 12
使用ob娱乐下载\组件\形式\扩展\核心\类型\CollectionType;使用ob娱乐下载\组件\形式\扩展\核心\类型\EmailType;/ /……$构建器->add (“电子邮件”, CollectionType::类,//数组中的每个条目都是一个"email"字段“entry_type”= > EmailType::类,//这些选项被传递给每个"email"类型“entry_options”= > [“attr”= > [“类”=>“邮箱”],],]);
最简单的渲染方法是一次性渲染:
1
{{form_row(form.email)}}
一个更灵活的方法是这样的:
1 2 3 4 5 6 7 8 9 10 11
{{form_label(form.email)}}{{form_errors(form.email)}}<ul>{%为form中的emailField。电子邮件%}<李>{{form_errors(emailField)}}{{form_widget(emailField)}}李>{%endfor%}ul>
在这两种情况下,除非您的电子邮件
数据数组已经包含一些电子邮件。
在这个简单的示例中,仍然无法添加新地址或删除现有地址。方法可以添加新地址allow_add选项(以及可选的原型选项)(参见下面的示例)。从电子邮件
数组是可行的allow_delete选择。
allow_add设置为真正的
,然后如果提交了任何无法识别的项目,它们将被无缝添加到项目数组中。这在理论上是很好的,但在实践中要使客户端JavaScript正确需要付出更多的努力。
在前面的示例中,假设从电子邮件
数据数组。在这种情况下,将呈现两个输入字段,看起来像这样(取决于你的表单名称):
1 2
<输入类型=“电子邮件”id=“form_emails_0”的名字=“形式(电子邮件)[0]”价值=“foo@foo.com”/><输入类型=“电子邮件”id=“form_emails_1”的名字=“形式(电子邮件)[1]”价值=“bar@bar.com”/>
要允许您的用户添加另一个电子邮件,只需设置allow_add来真正的
并且-通过JavaScript -呈现另一个字段的名称形式(电子邮件)[2]
(以此类推,会有越来越多的字段)。
为帮助简化此操作,请设置原型选项真正的
允许你呈现一个“模板”字段,然后你可以在你的JavaScript中使用它来帮助你动态地创建这些新字段。渲染的原型字段看起来像这样:
1 2 3 4 5
<输入类型=“电子邮件”id=“form_emails___name__”的名字=“形式(电子邮件)(__name__)”价值=""/>
通过替换__name__
有一些独特的值(例如:2
),您可以在表单中构建并插入新的HTML字段。
使用jQuery,一个简单的示例可能如下所示。如果你一次性渲染你的集合字段(例如。form_row (form.emails)
),那么事情就更容易了,因为data-prototype
属性会自动为你呈现(略有不同-见下面的注释),你所需要的是以下JavaScript代码:
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
/ / add-collection-widget.jsjQuery (文档时(函数(){jQuery (“.add-another-collection-widget”) .click (函数(e){varlist = jQuery(jQuery(这) .attr (“数据一览表”));//尝试找到列表的计数器或使用列表的长度varCounter = list.data(“widget-counter”) | list.children().length;//获取原型模板varnewWidget = list.attr(“data-prototype”);//替换原型id和名称中的"__name__//电子邮件中唯一的数字//结束名称属性看起来像name="contact[email][2]"newWidget = newWidget.replace(/ __name__ / g、计数器);//增加计数器计数器+ +;//并存储它,如果允许删除小部件,则不能使用长度list.data (“widget-counter”、计数器);//创建一个新的列表元素并将其添加到列表中varjQuery(list.attr(“data-widget-tags”) . html (newWidget);newElem.appendTo(列表);});});
并按如下方式更新模板:
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
{{form_start(form)}}{#……#}{#在data-prototype属性上存储原型<ulid=“email-fields-list”data-prototype="{{form_widget(form.email .vars.prototype)|e}}"data-widget-tags="{{''|e}}">{%为form中的emailField。电子邮件%}<李>{{form_errors(emailField)}}{{form_widget(emailField)}}李>{%endfor%}ul><按钮类型=“按钮”类=“add-another-collection-widget”数据表格=“# email-fields-list”>添加另一封邮件按钮>{#……#}{{form_end(form)}}<脚本src=“add-collection-widget.js”>脚本>
提示
如果您要一次呈现整个集合,则原型将自动在data-prototype
元素的属性(例如:div
或表格
)围绕着你的收藏。唯一的区别是整个“表单行”都是为您呈现的,这意味着您不必像上面所做的那样将其包装在任何容器元素中。
12 3 4 5 6 7 8 9 10 11 12
使用ob娱乐下载\组件\形式\扩展\核心\类型\CollectionType;使用ob娱乐下载\组件\形式\扩展\核心\类型\EmailType;/ /……$构建器->add (“电子邮件”, CollectionType::类,//数组中的每个条目都是一个"email"字段“entry_type”= > EmailType::类,//这些选项被传递给每个"email"类型“entry_options”= > [“attr”= > [“类”=>“邮箱”],],]);
1
{{form_row(form.email)}}
1 2 3 4 5 6 7 8 9 10 11
{{form_label(form.email)}}{{form_errors(form.email)}}<ul>{%为form中的emailField。电子邮件%}<李>{{form_errors(emailField)}}{{form_widget(emailField)}}李>{%endfor%}ul>
电子邮件
数据数组已经包含一些电子邮件。电子邮件
数组是可行的allow_delete选择。allow_add设置为真正的
,然后如果提交了任何无法识别的项目,它们将被无缝添加到项目数组中。这在理论上是很好的,但在实践中要使客户端JavaScript正确需要付出更多的努力。
在前面的示例中,假设从电子邮件
数据数组。在这种情况下,将呈现两个输入字段,看起来像这样(取决于你的表单名称):
1 2
<输入类型=“电子邮件”id=“form_emails_0”的名字=“形式(电子邮件)[0]”价值=“foo@foo.com”/><输入类型=“电子邮件”id=“form_emails_1”的名字=“形式(电子邮件)[1]”价值=“bar@bar.com”/>
要允许您的用户添加另一个电子邮件,只需设置allow_add来真正的
并且-通过JavaScript -呈现另一个字段的名称形式(电子邮件)[2]
(以此类推,会有越来越多的字段)。
为帮助简化此操作,请设置原型选项真正的
允许你呈现一个“模板”字段,然后你可以在你的JavaScript中使用它来帮助你动态地创建这些新字段。渲染的原型字段看起来像这样:
1 2 3 4 5
<输入类型=“电子邮件”id=“form_emails___name__”的名字=“形式(电子邮件)(__name__)”价值=""/>
通过替换__name__
有一些独特的值(例如:2
),您可以在表单中构建并插入新的HTML字段。
使用jQuery,一个简单的示例可能如下所示。如果你一次性渲染你的集合字段(例如。form_row (form.emails)
),那么事情就更容易了,因为data-prototype
属性会自动为你呈现(略有不同-见下面的注释),你所需要的是以下JavaScript代码:
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
/ / add-collection-widget.jsjQuery (文档时(函数(){jQuery (“.add-another-collection-widget”) .click (函数(e){varlist = jQuery(jQuery(这) .attr (“数据一览表”));//尝试找到列表的计数器或使用列表的长度varCounter = list.data(“widget-counter”) | list.children().length;//获取原型模板varnewWidget = list.attr(“data-prototype”);//替换原型id和名称中的"__name__//电子邮件中唯一的数字//结束名称属性看起来像name="contact[email][2]"newWidget = newWidget.replace(/ __name__ / g、计数器);//增加计数器计数器+ +;//并存储它,如果允许删除小部件,则不能使用长度list.data (“widget-counter”、计数器);//创建一个新的列表元素并将其添加到列表中varjQuery(list.attr(“data-widget-tags”) . html (newWidget);newElem.appendTo(列表);});});
并按如下方式更新模板:
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
{{form_start(form)}}{#……#}{#在data-prototype属性上存储原型<ulid=“email-fields-list”data-prototype="{{form_widget(form.email .vars.prototype)|e}}"data-widget-tags="{{''|e}}">{%为form中的emailField。电子邮件%}<李>{{form_errors(emailField)}}{{form_widget(emailField)}}李>{%endfor%}ul><按钮类型=“按钮”类=“add-another-collection-widget”数据表格=“# email-fields-list”>添加另一封邮件按钮>{#……#}{{form_end(form)}}<脚本src=“add-collection-widget.js”>脚本>
提示
如果您要一次呈现整个集合,则原型将自动在data-prototype
元素的属性(例如:div
或表格
)围绕着你的收藏。唯一的区别是整个“表单行”都是为您呈现的,这意味着您不必像上面所做的那样将其包装在任何容器元素中。
布尔默认的:假
如果设置为真正的
,则如果未识别的项提交到集合,则它们将作为新项添加。结束数组将包含现有项以及提交数据中的新项。有关详细信息,请参阅上面的示例。
的原型选项可以用来帮助呈现一个原型项,可以使用JavaScript在客户端动态创建新的表单项。有关更多信息,请参阅上面的示例和如何嵌入一个集合的形式.
谨慎
如果您正在嵌入整个其他表单以反映一对多的数据库关系,则可能需要手动确保这些新对象的外键设置正确。如果你使用Doctrine,这不会自动发生。更多细节请参见上面的链接。
假
如果设置为真正的
,则如果未识别的项提交到集合,则它们将作为新项添加。结束数组将包含现有项以及提交数据中的新项。有关详细信息,请参阅上面的示例。
的原型选项可以用来帮助呈现一个原型项,可以使用JavaScript在客户端动态创建新的表单项。有关更多信息,请参阅上面的示例和如何嵌入一个集合的形式.
谨慎
如果您正在嵌入整个其他表单以反映一对多的数据库关系,则可能需要手动确保这些新对象的外键设置正确。如果你使用Doctrine,这不会自动发生。更多细节请参见上面的链接。
布尔默认的:假
如果设置为真正的
,则如果提交的数据中不包含现有项,则该项将正确地从最终项数组中缺席。这意味着您可以通过JavaScript实现一个“delete”按钮,它可以简单地从DOM中删除一个表单元素。当用户提交表单时,表单在提交的数据中缺失意味着它将从最终数组中删除。
有关更多信息,请参见如何嵌入一个集合的形式.
谨慎
在嵌入对象集合时使用此选项时要小心。在这种情况下,如果删除任何嵌入的表单,则它们将将正确地从最终对象数组中缺失。但是,根据您的应用程序逻辑,当删除其中一个对象时,您可能希望删除它,或者至少删除它对主对象的外键引用。这些都不是自动处理的。有关更多信息,请参见如何嵌入一个集合的形式.
真正的
,则如果提交的数据中不包含现有项,则该项将正确地从最终项数组中缺席。这意味着您可以通过JavaScript实现一个“delete”按钮,它可以简单地从DOM中删除一个表单元素。当用户提交表单时,表单在提交的数据中缺失意味着它将从最终数组中删除。谨慎
在嵌入对象集合时使用此选项时要小心。在这种情况下,如果删除任何嵌入的表单,则它们将将正确地从最终对象数组中缺失。但是,根据您的应用程序逻辑,当删除其中一个对象时,您可能希望删除它,或者至少删除它对主对象的外键引用。这些都不是自动处理的。有关更多信息,请参见如何嵌入一个集合的形式.
布尔或可调用的
默认的:假
如果要显式地从表单中删除完全为空的集合项,则必须将此选项设置为真正的
.属性时,才会删除现有集合项allow_delete选择启用。否则将保留空值。
谨慎
的delete_empty
选项仅在规范化值为时删除项零
.如果嵌套entry_type是复合表单类型,必须设置要求
选项假
或设置empty_data
选项零
.这两个选项都可以在内部设置entry_options.阅读有关表单的empty_data选项来了解为什么这是必要的。
只有规范化值为时,才会从集合中删除值零
.但是,您也可以将选项值设置为一个可调用对象,它将对提交的集合中的每个值执行。如果可调用对象返回真正的
时,该值将从集合中移除。例如:
1 2 3 4 5 6 7 8 9
使用ob娱乐下载\组件\形式\扩展\核心\类型\CollectionType;/ /……$构建器->add (“用户”, CollectionType::类,/ /……“delete_empty”=>函数(用户$用户= null){返回零===$用户||空($用户->getFirstName ());}));
在复合表单类型中使用可调用对象特别有用,因为复合表单类型可以定义复杂的条件,将其视为空的。
真正的
.属性时,才会删除现有集合项allow_delete选择启用。否则将保留空值。谨慎
的delete_empty
选项仅在规范化值为时删除项零
.如果嵌套entry_type是复合表单类型,必须设置要求
选项假
或设置empty_data
选项零
.这两个选项都可以在内部设置entry_options.阅读有关表单的empty_data选项来了解为什么这是必要的。
零
.但是,您也可以将选项值设置为一个可调用对象,它将对提交的集合中的每个值执行。如果可调用对象返回真正的
时,该值将从集合中移除。例如:1 2 3 4 5 6 7 8 9
使用ob娱乐下载\组件\形式\扩展\核心\类型\CollectionType;/ /……$构建器->add (“用户”, CollectionType::类,/ /……“delete_empty”=>函数(用户$用户= null){返回零===$用户||空($用户->getFirstName ());}));
数组默认的:[]
类中指定的表单类型所传递的数组entry_type选择。例如,如果您使用ChoiceType作为你的entry_type选项(例如,对于下拉菜单的集合),那么您至少需要传递选择
底层类型的选项:
12 3 4 5 6 7 8 9 10 11 12 13 14 15
使用ob娱乐下载\组件\形式\扩展\核心\类型\CollectionType;使用ob娱乐下载\组件\形式\扩展\核心\类型\ChoiceType;/ /……$构建器->add (“favorite_cities”, CollectionType::类,“entry_type”= > ChoiceType::类,“entry_options”= > [“选择”= > [纳什维尔的=>纳什维尔的,“巴黎”=>“巴黎”,“柏林”=>“柏林”,“伦敦”=>“伦敦”,],],]);
选择
底层类型的选项:12 3 4 5 6 7 8 9 10 11 12 13 14 15
使用ob娱乐下载\组件\形式\扩展\核心\类型\CollectionType;使用ob娱乐下载\组件\形式\扩展\核心\类型\ChoiceType;/ /……$构建器->add (“favorite_cities”, CollectionType::类,“entry_type”= > ChoiceType::类,“entry_options”= > [“选择”= > [纳什维尔的=>纳什维尔的,“巴黎”=>“巴黎”,“柏林”=>“柏林”,“伦敦”=>“伦敦”,],],]);
字符串默认的:ob娱乐下载\\组件\\形式\\扩展\\核心\\类型\\ TextType
这是这个集合中每个项的字段类型(例如。TextType
,ChoiceType
等等)。例如,如果您有一个电子邮件地址数组,则可以使用EmailType.如果你想嵌入一些其他表单的集合,将表单类型类作为这个选项传递(例如:MyFormType::类
).
TextType
,ChoiceType
等等)。例如,如果您有一个电子邮件地址数组,则可以使用EmailType.如果你想嵌入一些其他表单的集合,将表单类型类作为这个选项传递(例如:MyFormType::类
).布尔默认的:真正的
属性时,此选项非常有用allow_add选择。如果真正的
(如果allow_add也真正的
),一个特殊的“prototype”属性将是可用的,这样你就可以在你的页面上呈现一个新元素应该是什么样子的“模板”示例。的的名字
属性为__name__
.这允许你通过JavaScript添加一个“添加另一个”按钮,读取原型,替换__name__
使用一些唯一的名称或数字,并在表单中呈现它。提交时,它将被添加到您的底层数组中,因为allow_add选择。
方法来呈现原型字段原型
集合字段中的变量:
1
{{form_row(form.email .vars.prototype)}}
注意,你真正需要的是“小部件”,但取决于你如何呈现你的表单,拥有整个“表单行”对你来说可能更容易。
提示
属性上的原型表单行自动可用data-prototype
元素的属性(例如:div
或表格
)围绕着你的收藏。
有关如何实际使用此选项的详细信息,请参见上面的示例以及如何嵌入一个集合的形式.
真正的
(如果allow_add也真正的
),一个特殊的“prototype”属性将是可用的,这样你就可以在你的页面上呈现一个新元素应该是什么样子的“模板”示例。的的名字
属性为__name__
.这允许你通过JavaScript添加一个“添加另一个”按钮,读取原型,替换__name__
使用一些唯一的名称或数字,并在表单中呈现它。提交时,它将被添加到您的底层数组中,因为allow_add选择。原型
集合字段中的变量:1
{{form_row(form.email .vars.prototype)}}
提示
属性上的原型表单行自动可用data-prototype
元素的属性(例如:div
或表格
)围绕着你的收藏。
混合默认的:零
允许您为原型定义特定的数据。添加的每一行最初都将包含此选项设置的数据集。缺省情况下,为所有条目配置的数据带有entry_options选项将被使用。
1 2 3 4 5 6 7 8 9 10
使用ob娱乐下载\组件\形式\扩展\核心\类型\CollectionType;使用ob娱乐下载\组件\形式\扩展\核心\类型\TextType;/ /……$构建器->add (“标签”, CollectionType::类,“entry_type”= > TextType::类,“allow_add”=>真正的,“原型”=>真正的,“prototype_data”=>“新的标签占位符”]);
1 2 3 4 5 6 7 8 9 10
使用ob娱乐下载\组件\形式\扩展\核心\类型\CollectionType;使用ob娱乐下载\组件\形式\扩展\核心\类型\TextType;/ /……$构建器->add (“标签”, CollectionType::类,“entry_type”= > TextType::类,“allow_add”=>真正的,“原型”=>真正的,“prototype_data”=>“新的标签占位符”]);
FormType.并不是所有的选项都列在这里-只有最适用于这种类型:
布尔默认的:真正的
在大多数情况下,如果你有作者
场,然后你期望setAuthor ()
在底层对象上调用。然而,在某些情况下,setAuthor ()
五月不被称为。设置by_reference
来假
确保在所有情况下都调用setter。
为了进一步解释这一点,这里有一个简单的例子:
12 3 4 5 6 7 8 9 10 11 12 13
使用ob娱乐下载\组件\形式\扩展\核心\类型\TextType;使用ob娱乐下载\组件\形式\扩展\核心\类型\EmailType;使用ob娱乐下载\组件\形式\扩展\核心\类型\FormType;/ /……$构建器=$这->createFormBuilder ($文章);$构建器->add (“标题”, TextType::类)->add ($构建器->创建(“作者”, FormType::类,“by_reference”= > ?)->add (“名字”, TextType::类)->add (“电子邮件”, EmailType::类))
如果by_reference
是真的吗,下面的事情发生在你打电话时的幕后提交()
(或handleRequest ()
)在表格上:
1 2 3
$文章->setTitle (“……”);$文章->getAuthor ()->setName (“……”);$文章->getAuthor ()->setEmail (“……”);
请注意,setAuthor ()
没有调用。作者因引用而有所修改。
如果你设置by_reference
对于false,提交看起来像这样:
1 2 3 4 5
$文章->setTitle (“……”);$作者=克隆$文章->getAuthor ();$作者->setName (“……”);$作者->setEmail (“……”);$文章->setAuthor ($作者);
所有这些by_reference = false
是强制框架调用父对象的setter。
类似地,如果你使用CollectionType字段,其中您的底层收集数据是一个对象(就像Doctrine的ArrayCollection
),然后by_reference
必须设置为假
如果你需要加法器和移除器(例如。addAuthor ()
而且removeAuthor ()
)被称为。
混合
-
. .该文件应该只包含“开始后”或“结束前”
-
设置为此占位符值。它的目的是让我们只包含该文件的一部分。
DEFAULT_PLACEHOLDER
这个选项决定字段的值返回当提交的值为空(或缺失)时。如果在视图中呈现表单时没有提供初始值,则不设置初始值。
这意味着它可以帮助您处理带有空白字段的表单提交。例如,如果你想要的名字
要显式设置为的字段John Doe
当没有选择值时,你可以这样做:
1 2 3 4
$构建器->add (“名字”,零, (“要求”=>假,“empty_data”=>“John Doe”]);
这仍然会呈现一个空文本框,但在提交John Doe
值将被设置。使用数据
或占位符
选项,在呈现的表单中显示此初始值。
如果表单是复合的,则可以设置empty_data
作为数组、对象或闭包。看到如何为窗体类配置空数据文章中有关于这些选项的详细信息。
请注意
如果你想设置empty_data
整个表单类的选项,请参见如何为窗体类配置空数据篇文章。
默认值为[]
(空数组)。
混合
-
. .该文件应该只包含“开始后”或“结束前”
-
设置为此占位符值。它的目的是让我们只包含该文件的一部分。
DEFAULT_PLACEHOLDER
这个选项决定字段的值返回当提交的值为空(或缺失)时。如果在视图中呈现表单时没有提供初始值,则不设置初始值。
这意味着它可以帮助您处理带有空白字段的表单提交。例如,如果你想要的名字
要显式设置为的字段John Doe
当没有选择值时,你可以这样做:
1 2 3 4
$构建器->add (“名字”,零, (“要求”=>假,“empty_data”=>“John Doe”]);
这仍然会呈现一个空文本框,但在提交John Doe
值将被设置。使用数据
或占位符
选项,在呈现的表单中显示此初始值。
如果表单是复合的,则可以设置empty_data
作为数组、对象或闭包。看到如何为窗体类配置空数据文章中有关于这些选项的详细信息。
请注意
如果你想设置empty_data
整个表单类的选项,请参见如何为窗体类配置空数据篇文章。
字符串默认的:零
允许您为表单字段定义帮助消息,默认情况下,表单字段呈现在字段下面。
1 2 3
$构建器->add (“zip_code”,零, (“帮助”=>“您信用卡账单地址的邮政编码。”]);
字符串默认的:零
配置用作字段标签的字符串,以防标签
选项未设置。这在使用时很有用关键字翻译信息.
如果您使用关键字翻译消息作为标签,您通常会对同一个标签有多个关键字消息(例如。profile_address_street
,invoice_address_street
).这是因为标签是为字段的每个“路径”构建的。为了避免重复的关键字消息,您可以将标签格式配置为静态值,例如:
1 2 3 4 5 6 7 8
/ /……$profileFormBuilder->add (“地址”, AddressType::类,“label_format”=>“form.address. %名称%”]);$invoiceFormBuilder->add (“发票”, AddressType::类,“label_format”=>“form.address. %名称%”]);
此选项由子类型继承。的标签街
字段都将使用form.address.street
关键字信息。
label格式有两个变量:
-
% id %
-
字段的唯一标识符,由字段的完整路径和字段名组成。
profile_address_street
);
-
%的名字%
-
字段名(例如:
街
).
默认值(零
)的结果是“人性化”版本字段名的。
请注意
的label_format
选项在表单主题中求值。确保更新你的模板以防你定制表单主题.
布尔默认的:真正的
在大多数情况下,如果你有作者
场,然后你期望setAuthor ()
在底层对象上调用。然而,在某些情况下,setAuthor ()
五月不被称为。设置by_reference
来假
确保在所有情况下都调用setter。
为了进一步解释这一点,这里有一个简单的例子:
12 3 4 5 6 7 8 9 10 11 12 13
使用ob娱乐下载\组件\形式\扩展\核心\类型\TextType;使用ob娱乐下载\组件\形式\扩展\核心\类型\EmailType;使用ob娱乐下载\组件\形式\扩展\核心\类型\FormType;/ /……$构建器=$这->createFormBuilder ($文章);$构建器->add (“标题”, TextType::类)->add ($构建器->创建(“作者”, FormType::类,“by_reference”= > ?)->add (“名字”, TextType::类)->add (“电子邮件”, EmailType::类))
如果by_reference
是真的吗,下面的事情发生在你打电话时的幕后提交()
(或handleRequest ()
)在表格上:
1 2 3
$文章->setTitle (“……”);$文章->getAuthor ()->setName (“……”);$文章->getAuthor ()->setEmail (“……”);
请注意,setAuthor ()
没有调用。作者因引用而有所修改。
如果你设置by_reference
对于false,提交看起来像这样:
1 2 3 4 5
$文章->setTitle (“……”);$作者=克隆$文章->getAuthor ();$作者->setName (“……”);$作者->setEmail (“……”);$文章->setAuthor ($作者);
所有这些by_reference = false
是强制框架调用父对象的setter。
类似地,如果你使用CollectionType字段,其中您的底层收集数据是一个对象(就像Doctrine的ArrayCollection
),然后by_reference
必须设置为假
如果你需要加法器和移除器(例如。addAuthor ()
而且removeAuthor ()
)被称为。
作者
场,然后你期望setAuthor ()
在底层对象上调用。然而,在某些情况下,setAuthor ()
五月不被称为。设置by_reference
来假
确保在所有情况下都调用setter。12 3 4 5 6 7 8 9 10 11 12 13
使用ob娱乐下载\组件\形式\扩展\核心\类型\TextType;使用ob娱乐下载\组件\形式\扩展\核心\类型\EmailType;使用ob娱乐下载\组件\形式\扩展\核心\类型\FormType;/ /……$构建器=$这->createFormBuilder ($文章);$构建器->add (“标题”, TextType::类)->add ($构建器->创建(“作者”, FormType::类,“by_reference”= > ?)->add (“名字”, TextType::类)->add (“电子邮件”, EmailType::类))
by_reference
是真的吗,下面的事情发生在你打电话时的幕后提交()
(或handleRequest ()
)在表格上:1 2 3
$文章->setTitle (“……”);$文章->getAuthor ()->setName (“……”);$文章->getAuthor ()->setEmail (“……”);
setAuthor ()
没有调用。作者因引用而有所修改。by_reference
对于false,提交看起来像这样:1 2 3 4 5
$文章->setTitle (“……”);$作者=克隆$文章->getAuthor ();$作者->setName (“……”);$作者->setEmail (“……”);$文章->setAuthor ($作者);
by_reference = false
是强制框架调用父对象的setter。ArrayCollection
),然后by_reference
必须设置为假
如果你需要加法器和移除器(例如。addAuthor ()
而且removeAuthor ()
)被称为。混合
-
. .该文件应该只包含“开始后”或“结束前”
-
设置为此占位符值。它的目的是让我们只包含该文件的一部分。
DEFAULT_PLACEHOLDER
这个选项决定字段的值返回当提交的值为空(或缺失)时。如果在视图中呈现表单时没有提供初始值,则不设置初始值。
这意味着它可以帮助您处理带有空白字段的表单提交。例如,如果你想要的名字
要显式设置为的字段John Doe
当没有选择值时,你可以这样做:
1 2 3 4
$构建器->add (“名字”,零, (“要求”=>假,“empty_data”=>“John Doe”]);
这仍然会呈现一个空文本框,但在提交John Doe
值将被设置。使用数据
或占位符
选项,在呈现的表单中显示此初始值。
如果表单是复合的,则可以设置empty_data
作为数组、对象或闭包。看到如何为窗体类配置空数据文章中有关于这些选项的详细信息。
请注意
如果你想设置empty_data
整个表单类的选项,请参见如何为窗体类配置空数据篇文章。
默认值为[]
(空数组)。
的名字
要显式设置为的字段John Doe
当没有选择值时,你可以这样做:1 2 3 4
$构建器->add (“名字”,零, (“要求”=>假,“empty_data”=>“John Doe”]);
John Doe
值将被设置。使用数据
或占位符
选项,在呈现的表单中显示此初始值。empty_data
作为数组、对象或闭包。看到如何为窗体类配置空数据文章中有关于这些选项的详细信息。请注意
如果你想设置empty_data
整个表单类的选项,请参见如何为窗体类配置空数据篇文章。
[]
(空数组)。混合
-
. .该文件应该只包含“开始后”或“结束前”
-
设置为此占位符值。它的目的是让我们只包含该文件的一部分。
DEFAULT_PLACEHOLDER
这个选项决定字段的值返回当提交的值为空(或缺失)时。如果在视图中呈现表单时没有提供初始值,则不设置初始值。
这意味着它可以帮助您处理带有空白字段的表单提交。例如,如果你想要的名字
要显式设置为的字段John Doe
当没有选择值时,你可以这样做:
1 2 3 4
$构建器->add (“名字”,零, (“要求”=>假,“empty_data”=>“John Doe”]);
这仍然会呈现一个空文本框,但在提交John Doe
值将被设置。使用数据
或占位符
选项,在呈现的表单中显示此初始值。
如果表单是复合的,则可以设置empty_data
作为数组、对象或闭包。看到如何为窗体类配置空数据文章中有关于这些选项的详细信息。
请注意
如果你想设置empty_data
整个表单类的选项,请参见如何为窗体类配置空数据篇文章。
的名字
要显式设置为的字段John Doe
当没有选择值时,你可以这样做:1 2 3 4
$构建器->add (“名字”,零, (“要求”=>假,“empty_data”=>“John Doe”]);
John Doe
值将被设置。使用数据
或占位符
选项,在呈现的表单中显示此初始值。empty_data
作为数组、对象或闭包。看到如何为窗体类配置空数据文章中有关于这些选项的详细信息。请注意
如果你想设置empty_data
整个表单类的选项,请参见如何为窗体类配置空数据篇文章。
字符串默认的:零
允许您为表单字段定义帮助消息,默认情况下,表单字段呈现在字段下面。
1 2 3
$构建器->add (“zip_code”,零, (“帮助”=>“您信用卡账单地址的邮政编码。”]);
1 2 3
$构建器->add (“zip_code”,零, (“帮助”=>“您信用卡账单地址的邮政编码。”]);
字符串默认的:零
配置用作字段标签的字符串,以防标签
选项未设置。这在使用时很有用关键字翻译信息.
如果您使用关键字翻译消息作为标签,您通常会对同一个标签有多个关键字消息(例如。profile_address_street
,invoice_address_street
).这是因为标签是为字段的每个“路径”构建的。为了避免重复的关键字消息,您可以将标签格式配置为静态值,例如:
1 2 3 4 5 6 7 8
/ /……$profileFormBuilder->add (“地址”, AddressType::类,“label_format”=>“form.address. %名称%”]);$invoiceFormBuilder->add (“发票”, AddressType::类,“label_format”=>“form.address. %名称%”]);
此选项由子类型继承。的标签街
字段都将使用form.address.street
关键字信息。
label格式有两个变量:
-
% id %
-
字段的唯一标识符,由字段的完整路径和字段名组成。
profile_address_street
);
-
%的名字%
-
字段名(例如:
街
).
默认值(零
)的结果是“人性化”版本字段名的。
请注意
的label_format
选项在表单主题中求值。确保更新你的模板以防你定制表单主题.
标签
选项未设置。这在使用时很有用关键字翻译信息.profile_address_street
,invoice_address_street
).这是因为标签是为字段的每个“路径”构建的。为了避免重复的关键字消息,您可以将标签格式配置为静态值,例如:1 2 3 4 5 6 7 8
/ /……$profileFormBuilder->add (“地址”, AddressType::类,“label_format”=>“form.address. %名称%”]);$invoiceFormBuilder->add (“发票”, AddressType::类,“label_format”=>“form.address. %名称%”]);
街
字段都将使用form.address.street
关键字信息。% id %
profile_address_street
);%的名字%
街
).零
)的结果是“人性化”版本字段名的。请注意
的label_format
选项在表单主题中求值。确保更新你的模板以防你定制表单主题.
变量 | 类型 | 使用 |
---|---|---|
allow_add | 布尔 |
的值allow_add选择。 |
allow_delete | 布尔 |
的值allow_delete选择。 |