比方說,我將自定義表單類型創建爲服務,如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自定義窗體類型(與gender1
和gender2
別名),我可以用這樣的:
$builder
->add('field1', 'gender1')
->add('field2', 'gender2');
這讓我只用一個類(GenderType
)在不同的輸入參數(在這個例子中我比2有更多的可能性)中增加了一些通用邏輯。
但是從Symfony 2.8開始,不推薦使用服務別名添加字段。類名具有作爲第二個參數傳遞,而不是像這樣:
$builder->add('field1', GenderType::class)
那麼,怎樣才能讓我的2個服務(他們每個人不具有相同的輸入參數)之間的區別?
創建Gender1Type
和Gender2Type
擴展一個摘要GenderType
類會非常痛苦,因爲我將不得不創建許多具有空內容的類。
對於如何在Symfony 2.8中實現我的模式,使用不同的輸入參數保持服務,但不創建很多類,你有什麼想法嗎?
是的。我遇到了同樣的事情,得出了同樣的結論。在使用類名方面有很多優點,但在這種情況下,我仍然沒有看到比原始設計明顯的優勢。好吧。 – Cerad