升级到Symfony 3后,自定义FormType会出现问题

时间:2017-03-06 12:17:55

标签: symfony symfony-forms

我一直在Symfony 2.8上使用稍微改编的OhGoogleMapFormTypeBundle版本作为LocationType / MapType到我自己的包中。升级到Symfony 3.2后,当尝试保存为Location填写的数据时,我收到错误

  

属性" lat"也不是其中一种方法" getLat()"," lat()"," isLat()"," hasLat()&# 34;," __ get()"在课程中存在且具有公共访问权限#34; LocationBundle \ Form \ LocationType"。

自定义FormType通过LocationType :: class包含在另一个FormType(NodeType)中。

我一直在查看Symfony中的更改,特别是Form组件,以查看某些内容是否会影响数据读取/写入实体的方式,但无法找到任何内容。

LocationType中包含MapType的代码是

public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder
        ->add('LatLng', MapType::class, array(
            'default_lat' => '37.06394430056685',
            'default_lng' => '-3.09814453125',
            'map_width' => 600,
            'type' => HiddenType::class
        ))
        ;
}

在最终视图(浏览器)中,使用

收集字段
<input id="node_Location_LatLng_lat" name="node[Location][LatLng][lat]" value="36.945971" type="hidden"><input id="node_Location_LatLng_lng" name="node[Location][LatLng][lng]" value="-3.1785935000000336" type="hidden">

我的实体是否应该接收数组LatLng而不是其组件?这是在更新到Symfony 3之前的工作方式。

我做错了吗?我需要定义缺少的方法吗?我是否必须实现ValueTransformer ...但是,为什么以前没有必要呢?

1 个答案:

答案 0 :(得分:0)

我发现了问题。在MapType :: configureOptions()中,我将'data_class' => LocationType::class定义为'data_class' => 'LocationBundle\Entity\Location'

将代码转换为Symfony3规则时必定会发生这种情况。我把问题留给别人......甚至可能是我自己。