Forms Symfony中的多种形式
我有一张表格。此表格提交3个单词,例如啤酒、可乐、葡萄酒。在下一个操作中,我确实希望有一个具有一个或多个选项的三选项小部件:Forms Symfony中的多种形式,forms,symfony1,symfony-1.4,symfony-forms,Forms,Symfony1,Symfony 1.4,Symfony Forms,我有一张表格。此表格提交3个单词,例如啤酒、可乐、葡萄酒。在下一个操作中,我确实希望有一个具有一个或多个选项的三选项小部件: -beer: //first choice field * buddy lighty //choice one * busch //choice two * miler //choice three -coke: //second choic
-beer: //first choice field
* buddy lighty //choice one
* busch //choice two
* miler //choice three
-coke: //second choice field
* coke diet
* coke
* coke vanilla
-wine: //third choice field
* bordeaux
* suave
* champange
<submit-button>
我希望每一个选择都集中在一个行动上。因此,如果有人做出选择,布施、可口可乐、苏威将被提交。我怎样才能意识到这一点
更新:
谢谢你的评论。我可能忘了说我不知道我需要多少下拉菜单。可能只有啤酒和可乐,或者啤酒、可乐、葡萄酒和果汁。这取决于用户在操作之前填写的表单数量!我尝试在forms.class.php中使用foreach循环来实现它。但这没用
我使用原则。一种简单的方法是根据您的模型将每个项配置为可空,然后使用表单选项显示/隐藏某些小部件。e、 例如,如果您的模式类似于此示例:
DrinkOrder:
columns:
# ...
beer:
type: enum
values: [Old Peculier,Tribute,Deuchars]
notnull: false
wine:
type: enum
values: [Bordeaux,Suave,Champagne]
notnull: false
# ...etc
按如下方式配置表单:
class DrinkOrderForm extends BaseDrinkOrderForm
{
public function configure()
{
if ($this->getOption('hide_wine'))
{
$this->widgetSchema['wine'] = new sfWidgetFormInputHidden;
}
// … etc
}
}
然后,当上一个表单的操作提交时,您可以向表单传递选项,如:
$this->form = new DrinkOrderForm($drink_order, array(
'hide_wine' => true,
'hide_beer' => false,
));
这只是一个简单的示例-您可以使用与另一个表的关系(例如wine_id和SFWidgetFormDoctorInEchoice小部件和验证器),而不是枚举类型
你不能做的一件事是有3-4个单独的表单,因为web浏览器只会提交其中一个表单。根据模型的设置方式,您可以将表单嵌入到其他表单中,也可以使用上述更简单的技术
如果选择类型的数量不是固定的,那么您应该考虑使用表单系统的EmbedderRelation方法或ahDoctrineEasyEmbeddedRelationsPlugin之类的方法来动态添加子表单。从你的例子中很难知道你想走多远 实现这一点的一种简单方法取决于您的模型,也就是将每个项配置为可空,然后使用表单选项显示/隐藏某些小部件。e、 例如,如果您的模式类似于此示例:
DrinkOrder:
columns:
# ...
beer:
type: enum
values: [Old Peculier,Tribute,Deuchars]
notnull: false
wine:
type: enum
values: [Bordeaux,Suave,Champagne]
notnull: false
# ...etc
按如下方式配置表单:
class DrinkOrderForm extends BaseDrinkOrderForm
{
public function configure()
{
if ($this->getOption('hide_wine'))
{
$this->widgetSchema['wine'] = new sfWidgetFormInputHidden;
}
// … etc
}
}
然后,当上一个表单的操作提交时,您可以向表单传递选项,如:
$this->form = new DrinkOrderForm($drink_order, array(
'hide_wine' => true,
'hide_beer' => false,
));
这只是一个简单的示例-您可以使用与另一个表的关系(例如wine_id和SFWidgetFormDoctorInEchoice小部件和验证器),而不是枚举类型
你不能做的一件事是有3-4个单独的表单,因为web浏览器只会提交其中一个表单。根据模型的设置方式,您可以将表单嵌入到其他表单中,也可以使用上述更简单的技术
如果选择类型的数量不是固定的,那么您应该考虑使用表单系统的EmbedderRelation方法或ahDoctrineEasyEmbeddedRelationsPlugin之类的方法来动态添加子表单。从你的例子中很难知道你想走多远 只需将3个不同的下拉列表添加到同一个表单中?你能不能至少把你以前试过的和失败的地方贴出来,因为你似乎在问一些基本的问题,顺便说一下,这些问题都有很好的记录。我对我的问题做了更新。对我来说,这不是一个基本问题。很抱歉你可能有我的代码吗?这是条令客体形式吗?是的,这是条令。你能帮我吗?当你在下一个动作中说。。。你是说用户会多次提交表单?您事先知道用户可以选择哪种下拉列表吗?只需将3个不同的下拉列表添加到同一个表单中即可?你能不能至少把你以前试过的和失败的地方贴出来,因为你似乎在问一些基本的问题,顺便说一下,这些问题都有很好的记录。我对我的问题做了更新。对我来说,这不是一个基本问题。很抱歉你可能有我的代码吗?这是条令客体形式吗?是的,这是条令。你能帮我吗?当你在下一个动作中说。。。你是说用户会多次提交表单?您是否事先知道用户可以从哪些下拉列表中进行选择?