【问题标题】:Symfony 2.8/3.0 upgrade: how to deal with form types with variable parameters?Symfony 2.8/3.0 升级:如何处理带可变参数的表单类型?
【发布时间】: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 种自定义表单类型(带有 gender1gender2 别名),我可以这样使用:

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

这让我可以在具有不同输入参数的一个类 (GenderType) 中添加一些通用逻辑(在此示例中,我有比 2 更多的可能性)。

但从 Symfony 2.8 开始,不推荐使用服务别名添加字段。类名必须作为第二个参数传递,如下所示:

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

那么我怎样才能使我的 2 个服务(它们中的每一个都没有相同的输入参数)之间有所不同?

创建 Gender1TypeGender2Type 扩展抽象 GenderType 类会非常痛苦,因为我必须创建很多内容为空的类。

你知道如何在 Symfony 2.8 中实现我的模式,让服务具有不同的输入参数,但不创建很多类吗?

【问题讨论】:

    标签: symfony-forms symfony symfony-2.8


    【解决方案1】:

    好吧,在深入挖掘这个话题之后,someone already asked 的问题直接在 Symfony 2.8 中的PR concerning this change 中。

    答案是我正在做的模式不再可能,所以我看到了 2 个解决我的问题的方法:

    • 为我的自定义类型创建尽可能多的类,而不是一直使用同一个类,并使这些类扩展一个抽象类(在我的示例中:创建 Gender1TypeGender2Type 类扩展一个AbstractGenderType抽象类)
    • 只保留一个类,但添加选项以传递我的特定参数。

    【讨论】:

    • 是的。我遇到了同样的事情并得出了同样的结论。使用类名有一些优势,但在这种情况下,我仍然看不到与原始设计相比有明显优势。哦,好吧。
    猜你喜欢
    • 1970-01-01
    • 2019-02-21
    • 2017-03-22
    • 2018-10-17
    • 2019-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多