Symfonyob娱乐下载 2.7新增功能:选择表单类型重构
2015年4月22日·发表的哈维尔Eguiluz
警告:这篇文章是关于一个不受支持的Symfony版本。ob娱乐下载有些信息可能已经过时了。阅读最新的Symfony文档ob娱乐下载.
的选择表格类型是Symfony定义的最高级的表单类型之一。ob娱乐下载它也是最重要的类型之一,因为许多其他类型继承自它,例如EntityType,CountryType而且LocaleType.
在Syob娱乐下载mfony 2.7中,此表单类型已被删除完全重构以支持标签、值、索引和属性的动态生成.多亏了新的选项,现在这是可能的choice_label
,choice_name
,choice_value
,choice_attr
,group_by
而且choices_as_values
.
动态生成选择标签
的键值选择
数组用作标签,但可以将可调用对象传递给choice_label
选项来动态生成它们:
1 2 3 4 5 6 7 8 9 10 11
$构建器->add (“参加”,“选择”,数组(“选择”= >数组(“是的”= >真正的,“不”= >假,“也许”= >零),“choices_as_values”= >真正的,“choice_label”= >函数($allChoices,$currentChoiceKey){返回“form.choice”。.$currentChoiceKey;}));
除了可调用对象,你还可以传递属性的名称作为标签:
1 2 3 4 5 6 7 8 9
$构建器->add (“参加”,“选择”,数组(“选择”= >数组(状态::getInstance(状态::是的),状态::getInstance(状态::没有),状态::getInstance(状态::也许),),“choices_as_values”= >真正的,“choice_label”= >“displayName的”));
动态生成选择名称和值
使用choice_name
选项为每个选项生成表单名称choice_value
选项来生成它们的字符串值:
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
$构建器->add (“参加”,“选择”,数组(“选择”= >数组(“是的”= >真正的,“不”= >假,“也许”= >零),“choices_as_values”= >真正的,“choice_name”= >函数($allChoices,$currentChoiceKey){//使用标签作为名称返回函数$currentChoiceKey);},“choice_value”= >函数($allChoices,$currentChoiceKey){如果(零===$currentChoiceKey) {返回“零”;}如果(真正的===$currentChoiceKey) {返回“真正的”;}返回“假”;}));
在这些选项中,您还可以使用属性的名称,而不是可调用对象。
动态生成选择属性
的choice_attr
定义应用于每个选项的所有附加HTML属性。这个选项允许使用一个简单的数组定义它的值,这对于简单的选择是理想的:
1 2 3 4 5 6 7 8 9 10 11
$构建器->add (“参加”,“选择”,数组(“选择”= >数组(“是的”= >真正的,“不”= >假,“也许”= >零),“choices_as_values”= >真正的,“choice_attr”= >数组(“也许”= >数组(“类”= >“text-muted”),),));
当使用更复杂的选项时,使用callable可能是个好主意:
12 3 4 5 6 7 8 9 10 11 12 13 14 15
$构建器->add (“参加”,“选择”,数组(“选择”= >数组(“是的”= >真正的,“不”= >假,“也许”= >零),“choices_as_values”= >真正的,“choice_attr”= >函数($allChoices,$currentChoiceKey){如果(零===$currentChoiceKey) {返回数组(“类”= >“text-muted”);}返回数组();}));
同样,您可以向此选项传递一个属性路径,而不是数组或可调用对象。
动态选择分组
类提供的相同结构对选项进行分组选择
选择:
12 3 4 5 6 7 8 9 10 11 12
$构建器->add (“参加”,“选择”,数组(“选择”= >数组(“决定”= >数组(“是的”= >真正的,“不”= >假),“决定”= >数组(“也许”= >零,),),“choices_as_values”= >真正的));
属性的回调或属性路径也可以动态生成选择的分组group_by
选择:
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
$构建器->add (“参加”,“选择”,数组(“选择”= >数组(“是的”= >真正的,“不”= >假,“也许”= >零),“choices_as_values”= >真正的,//使用回调函数定义的分组“group_by”= >函数($allChoices,$currentChoiceKey){如果(零===$currentChoiceKey) {返回“决定”;}返回“决定”;}));
动态生成首选选择
最后,首选选择的生成可以在new中定义preferred_choices
选项,使用数组、回调或属性路径:
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16
$构建器->add (“参加”,“选择”,数组(“选择”= >数组(“是的”= >真正的,“不”= >假,“也许”= >零),“choices_as_values”= >真正的,//使用数组显示“true”选项“preferred_choices”= >数组(真正的),//使用可调用对象显示“true”选项“preferred_choices”= >函数($选择,$关键){返回真正的===$选择;}));
发表在#生活在边缘
评论
评论截止。
为了确保评论保持相关性,旧帖子将被关闭。
但请注意,这将引入2.6(或更低)的一些BC中断,这些中断目前尚未解决。
请看这里:https://github.com/symfoob娱乐下载ny/symfony/issues/14377
这里:https://github.com/symfonyob娱乐下载/symfony/issues/14382