Symfony2 forms - structured data to flat entity

时间:2015-10-06 08:41:24

标签: php forms symfony doctrine-orm

Is it possible to map this data by SF2 form

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

to the entity

Box[name, width, height, length]

Something like:

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

Thanks!

1 个答案:

答案 0 :(得分:0)

短版没有。上面的dimensions数组键必须是embedded form,但是您可以将数据类设置为可能(可能)工作的同一对象。 E.g。

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' ]);
    }
}

所以你有两种表单类型,其中一种嵌入另一种。对于MyFormTypedimension字段未映射到MyClass,但它具有相同的data_class选项,这意味着当表单解析时,它应设置width对象上的1}},heightlength属性。

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