2015-10-06 47 views
-1

是否有可能将这些数据通过SF2形式Symfony2的形式 - 结构化数据持平实体

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

到实体

Box[name, width, height, length] 

东西映射这样的:

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

谢谢!

回答

0

Short version no。上面的dimensions数组键必须是embedded form,但是您可以将数据类设置为将(可能)工作的相同对象。例如。

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,heightlength属性。

我没有测试过这个,但理论上这应该工作。理想情况下,你会改变提交的数据以匹配你的对象(因为Symfony表单只是你的对象的视图),但这可能是一个体面的补丁。