Php Symfony2表单-结构化数据到平面实体

Php Symfony2表单-结构化数据到平面实体,php,forms,symfony,doctrine-orm,Php,Forms,Symfony,Doctrine Orm,是否可以通过SF2表单映射此数据 [ 'name' => 'XL', 'dimensions' => [ 'width' => 50, 'height' => 20, 'length' => 20, ] ] 给实体 Box[name, width, height, length] 比如: $builder->add('dimensions.width', 'text', [ 'prop

是否可以通过SF2表单映射此数据

[
   'name' => 'XL',
   'dimensions' => [
       'width' => 50,
       'height' => 20,
       'length' => 20,
    ]
] 
给实体

Box[name, width, height, length]
比如:

$builder->add('dimensions.width', 'text', [
    'property_path' => 'width'
])

谢谢

简短版本号。上面的
dimensions
数组键必须是,但是您可以将数据类设置为(可能)工作的同一对象。例如

class DimensionType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('width')->add('height')->add('length');
    }

    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults([ 'data_class' => 'MyClass' ]);
    }
}

class MyFormType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('name')->add('dimension', new DimensionType(), [ 'mapped' => false, 'data' => $options['data'] ]);
    }

    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults([ 'data_class' => 'MyClass' ]);
    }
}
所以有两种表单类型,一种嵌入到另一种中。对于
MyFormType
dimension
字段未映射到
MyClass
,但是它具有相同的
data\u class
选项,这意味着当表单解析时,它应该在对象上设置
宽度
高度
长度
属性

我还没有测试过这个,但理论上应该可以。理想情况下,您应该更改提交的数据以匹配您的对象(因为Symfony表单只是对象的视图),但这可能是一个不错的补丁