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!
答案 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' ]);
}
}
所以你有两种表单类型,其中一种嵌入另一种。对于MyFormType
,dimension
字段未映射到MyClass
,但它具有相同的data_class
选项,这意味着当表单解析时,它应设置width
对象上的1}},height
和length
属性。
我还没有对此进行过测试,但理论上这应该可行。理想情况下,您可以更改提交的数据以匹配您的对象(因为Symfony表单只是对象的视图),但这可能是一个不错的补丁。