为JSON API和动态多维数组使用Symfony表单

为JSON API和动态多维数组使用Symfony表单,symfony,symfony-forms,Symfony,Symfony Forms,我将Symfony表单组件用于我们的restishjsonapi(灵感来源于) 现在我有了一些多维POST请求,它们总是使用相同的根键(name和actions),但子元素不同 { "name": "Name", "actions": [{ "type": "type_of_action", "config": { "name": "name", "assigned_to": "23cb1a6b-5a

我将Symfony表单组件用于我们的restishjsonapi(灵感来源于)

现在我有了一些多维POST请求,它们总是使用相同的根键(
name
actions
),但子元素不同

{
    "name": "Name",
    "actions": [{
        "type": "type_of_action",
        "config": {
            "name": "name",
            "assigned_to": "23cb1a6b-5a99-4b91-ae72-b52882b45f47",
            "information": "Lorem Impsum"
        }
    },{
        "type": "type_of_other_action",
        "config": {
            "name": "name",
            "dueDate": "2016-12-01"
            "active": "true"
        }
    }]
}
正如您所看到的,
config
可以在每个
操作
-元素上有所不同。我需要这样的东西:

->add('config', [TaskActionType::class, OtherActionType::class])

我知道,不可能呈现这样的表单,但我只需要它来验证请求并将其传输到可靠的数组中(
$data=$form->get('actions')->getData()
)。

尝试将option param发送到表单中,然后呈现该子表单类型

控制器:

$form = $this->createForm(MainForm::class, null, [
           'method' => Request::METHOD_POST,
           'param' => $param
       ]);
主要表格:

/**
* {@inheritdoc}
*/
public function buildForm(FormBuilderInterface $builder, array $options)
    {
     $param = $options['param'];


    if (param == "type1") {
        $builder
            ->add('config', FormType1::class))

    } elseif (param == "type2") {
        $builder
            ->add('config', FormType2::class))
    }

}

我希望这就是您所需要的。

尝试将option param发送到表单中,然后呈现该子表单类型

控制器:

$form = $this->createForm(MainForm::class, null, [
           'method' => Request::METHOD_POST,
           'param' => $param
       ]);
主要表格:

/**
* {@inheritdoc}
*/
public function buildForm(FormBuilderInterface $builder, array $options)
    {
     $param = $options['param'];


    if (param == "type1") {
        $builder
            ->add('config', FormType1::class))

    } elseif (param == "type2") {
        $builder
            ->add('config', FormType2::class))
    }

}

我希望这就是你所需要的。

对不起,不是真的。一个请求可以同时包含两个
config
对象。对不起,不是真的。一个请求可以同时包含
config
对象。