Symfony2:根据发送的数据在集合中使用不同的表单类型

时间:2014-11-18 15:25:41

标签: symfony symfony-forms fosrestbundle

我有几个从基地Widget继承的实体。

在表单中,我有一个字段widgets,它是一个集合。此表单基于一个实体,该实体与1:n的关系Widget。我想要做的是(基于widgets中发送的数据)来创建一个特定的子类来验证和创建实际的对象。

在表格中我定义了这样的字段:

$builder->add('widgets', 'collection', array(
    'type' => new WidgetType(),
    'allow_add' => true
));

例如,我有两个子类ImageWidgetMapWidget。我为这两个实体创建了FormTypes,现在客户端正在发送以下数据(我正在使用FOSRestBundle):

...
"widgets": [
    {
        "widget_type": "map",
        "stationId": 543647
    },
    {
        "widget_type": "image",
        "image": "data:image/png;data,...."
    }
]

基于属性widget_type(这是Doctrine用来区分数据库中的窗口小部件类型的属性),我希望表单为第一个条目创建MapWidgetType并且第二个ImageWidgetType

这可能吗?

我正在使用Symfony 2.5

1 个答案:

答案 0 :(得分:1)