【发布时间】:2016-03-11 22:05:00
【问题描述】:
假设我将自定义表单类型创建为服务,如Symfony documentation 中所述。但我想要 2 个“性别”自定义类型,有 2 个不同的输入参数,我在 Symfony 2.7 中这样做:
# 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>
如您所见,我将 same 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 中实现我的模式,让服务具有不同的输入参数,但不创建很多类吗?
【问题讨论】:
标签: symfony-forms symfony symfony-2.8