【问题标题】:Symfony2 forms - structured data to flat entitySymfony2 表单 - 结构化数据到平面实体
【发布时间】:2015-10-06 08:41:23
【问题描述】:

是否可以通过SF2形式映射这些数据

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

到实体

Box[name, width, height, length]

类似:

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

谢谢!

【问题讨论】:

    标签: php forms symfony doctrine-orm


    【解决方案1】:

    短版号上面的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' ]);
        }
    }
    

    所以您有两种表单类型,其中一种嵌入在另一种中。对于MyFormType,dimension 字段没有映射到MyClass,但是它具有相同的data_class 选项,这意味着当表单解析时,它应该设置width、height 和length 属性在物体上。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-05
      • 2023-04-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多