我一直在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 ...但是,为什么以前没有必要呢?
答案 0 :(得分:0)
我发现了问题。在MapType :: configureOptions()中,我将'data_class' => LocationType::class
定义为'data_class' => 'LocationBundle\Entity\Location'
。
将代码转换为Symfony3规则时必定会发生这种情况。我把问题留给别人......甚至可能是我自己。