Forms Symfony中的多种形式

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

我有一张表格。此表格提交3个单词,例如啤酒、可乐、葡萄酒。在下一个操作中,我确实希望有一个具有一个或多个选项的三选项小部件:

-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个不同的下拉列表添加到同一个表单中即可?你能不能至少把你以前试过的和失败的地方贴出来,因为你似乎在问一些基本的问题,顺便说一下,这些问题都有很好的记录。我对我的问题做了更新。对我来说,这不是一个基本问题。很抱歉你可能有我的代码吗?这是条令客体形式吗?是的,这是条令。你能帮我吗?当你在下一个动作中说。。。你是说用户会多次提交表单?您是否事先知道用户可以从哪些下拉列表中进行选择?