2012-01-30 53 views
2

我確實有一個表單。此表格提交例如3個字(啤酒,可樂,酒)。在接下來的動作我也想有三個選擇小部件與一個或更多的選擇:Symfony中的多個表格

-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循環來完成它。但它沒有幫助。

我使用Doctrine。

+3

只需將3個不同的下拉列表添加到同一個表單中?你至少可以發佈你之前嘗試過的以及你失敗的地方,因爲你似乎在提問非常基本的東西(這是很好的方式)。 – Gerry 2012-01-30 22:55:55

+0

我對我的問題做了更新。對我而言,這不是一個基本問題。抱歉。對我來說可能有代碼嗎? – craphunter 2012-01-31 09:50:36

+0

這是一個學說對象形式嗎? – Gerry 2012-01-31 10:16:27

回答

0

一個簡單的方法來做到這一點(取決於你的模型,也是)配置每個項目爲可空,然後使用窗體選項來顯示/隱藏某些小部件。例如,如果你的模式是這樣的懶人例如:

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, 
)); 

這僅僅是一個簡單的例子 - 而不是ENUM類型,你可以使用關係到另一個表(例如wine_id和sfWidgetFormDoctrineChoice部件&驗證器)。

你不能做的一件事是擁有3-4個獨立的表單,因爲網頁瀏覽器只會提交其中的一個。您必須將表單嵌入對方,或者使用上述更簡單的方法,具體取決於模型的設置。

如果選擇類型的數量不固定,那麼您需要使用類似於表單系統的embedRelation方法(或ahDoctrineEasyEmbeddedRelationsPlugin)來動態添加子表單。從你的例子中很難知道你想走多遠。 :)