2015-12-07 30 views
5

比方說,我將自定義表單類型創建爲服務,如Symfony documentation中所述。但我想2「性別」的自定義類型,有2個不同的輸入參數,這是我在Symfony的2.7做這樣的:Symfony 2.8/3.0升級:如何處理帶可變參數的表單類型?

# app/config/config.yml 
parameters: 
    genders1: 
     m: Male 
     f: Female 
    genders2: # This makes no sense at all, but it is for the example purpose! 
     h: Horse 
     t: Turtle 

然後,我被宣佈2個服務是這樣的:

<!-- src/AppBundle/Resources/config/services.xml --> 
<service id="app.form.type.gender1" class="AppBundle\Form\Type\GenderType"> 
    <argument>%genders1%</argument> 
    <tag name="form.type" alias="gender1" /> 
</service> 

<service id="app.form.type.gender2" class="AppBundle\Form\Type\GenderType"> 
    <argument>%genders2%</argument> 
    <tag name="form.type" alias="gender2" /> 
</service> 

正如你所看到的,我用的是相同的GenderType類2自定義窗體類型(與gender1gender2別名),我可以用這樣的:

$builder 
    ->add('field1', 'gender1') 
    ->add('field2', 'gender2'); 

這讓我只用一個類(GenderType)在不同的輸入參數(在這個例子中我比2有更多的可能性)中增加了一些通用邏輯。

但是從Symfony 2.8開始,不推薦使用服務別名添加字段。類名具有作爲第二個參數傳遞,而不是像這樣:

$builder->add('field1', GenderType::class) 

那麼,怎樣才能讓我的2個服務(他們每個人不具有相同的輸入參數)之間的區別?

創建Gender1TypeGender2Type擴展一個摘要GenderType類會非常痛苦,因爲我將不得不創建許多具有空內容的類。

對於如何在Symfony 2.8中實現我的模式,使用不同的輸入參數保持服務,但不創建很多類,你有什麼想法嗎?

回答

3

那麼,在深入挖掘這個話題之後,someone already asked這個問題直接在Symfony 2.8的PR concerning this change中。

得到的答覆是,我在做模式是不可能的了,所以我看到2個解決我的問題:

  • ,因爲我爲我的自定義類型有服務,而不是使用所有的創建儘可能多的參加同一類的時間,並使這些類擴展一個抽象類(在我的示例中:創建Gender1TypeGender2Type類,擴展AbstractGenderType抽象類)
  • 只保留一個類,但添加選項以傳遞我的特定參數。
+1

是的。我遇到了同樣的事情,得出了同樣的結論。在使用類名方面有很多優點,但在這種情況下,我仍然沒有看到比原始設計明顯的優勢。好吧。 – Cerad

相關問題