如何使此捆绑包与SonataAdminBundle
一起使用?我根据README配置了OhGoogleMapFormTypeBundle
。
这是我的configureFormFields
方法:
protected function configureFormFields(FormMapper $formMapper)
{
$formMapper
->with("Map")
->add('latlng', new GoogleMapType())
->end()
;
}
我收到错误:
Please define a type for field `latlng` in `GM\AppBundle\Admin\PlaceAdmin`
答案 0 :(得分:8)
所以FormMapper确实存在问题。 解决方案非常简单,但要发现它花了很多时间。 有两种方法:
第一个方法(我不喜欢):
$form = new YourType();
$form->buildForm($formMapper->getFormBuilder(),array());
第二方法:
->add('latlng', 'sonata_type_immutable_array',array('label' => 'Карта',
'keys' => array(
array('latlng', new GoogleMapType(), array())
)))
的实体:强> 的
public function setLatLng($latlng)
{
$this
->setLatitude($latlng['latlng']['lat'])
->setLongitude($latlng['latlng']['lng']);
return $this;
}
/**
* @Assert\NotBlank()
* @OhAssert\LatLng()
*/
public function getLatLng()
{
return array('latlng' => array('lat' => $this->latitude,'lng' => $this->longitude));
}
答案 1 :(得分:1)
我首先在GoogleMapType
文件中将app/config.yml
定义为服务:
services:
# ...
oh.GoogleMapFormType.form.type.googlemapformtype:
class: Oh\GoogleMapFormTypeBundle\Form\Type\GoogleMapType
tags:
- { name: form.type, alias: oh_google_maps }
我和Symfony2很相似,所以我不知道为什么别名必须是oh_google_maps
。
然后,我设置了用于在我的Entity类中存储纬度和经度的字段和函数:
private $latlng;
private $latitude;
private $longitude;
public function setLatlng($latlng)
{
$this->latlng = $latlng;
$this->latitude = $latlng['lat'];
$this->longitude = $latlng['lng'];
return $this;
}
/**
* @Assert\NotBlank()
* @OhAssert\LatLng()
*/
public function getLatLng()
{
return array('lat' => $this->latitude,'lng' => $this->longitude);
}
最后,在我的自定义Sonata Admin类中,configureFormFields
函数:
protected function configureFormFields(FormMapper $formMapper)
{
$formMapper
//...
->add('latlng', 'oh_google_maps', array());
}