4

我应该怎么做才能使这个捆绑包工作SonataAdminBundle?我OhGoogleMapFormTypeBundle根据README进行了配置。这是我的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`
4

2 回答 2

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));
}
于 2013-07-05T11:07:31.197 回答
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());
}
于 2013-12-01T20:38:21.093 回答