gpt4 book ai didi

php - Symfony2 嵌入式表单和 MongoDB 问题

转载 作者:IT老高 更新时间:2023-10-28 13:10:43 26 4
gpt4 key购买 nike

我尝试将一个表单类型嵌入到另一个表单类型中:

$builder->add('geolocation', new GeolocationType());

但是当我尝试将请求绑定(bind)到表单时

if($request->getMethod() == 'POST') {
$form->bindRequest($request);
}

我得到了错误

Catchable Fatal Error: Argument 1 passed to Company\StoreBundle\Document\Place::setGeolocation() must be an instance of Company\StoreBundle\Document\Geolocation, array given, called in
/var/www/Company/vendor/symfony/src/Symfony/Component/Form/Util/PropertyPath.php on line 392 and defined in /var/www/Company/src/Company/StoreBundle/Document/Place.php line 43

data_class 设置为 PlaceType 和 GeolocationType

这是我的代码:

Place.php

namespace Company\StoreBundle\Document;

use Doctrine\ODM\MongoDB\Mapping\Annotations as MongoDB;

/**
* @MongoDB\Document(collection="places")
*/
class Place
{
/**
* @MongoDB\Id
*/
private $id;

/**
* @MongoDB\String
*/
private $title;

/**
* @MongoDB\EmbedOne(targetDocument="Geolocation")
*/
private $geolocation;


/**
* Get id
*
* @return id $id
*/
public function getId()
{
return $this->id;
}

/**
* Set geolocation
*
* @param Company\StoreBundle\Document\Geolocation $geolocation
*/
public function setGeolocation(\Company\StoreBundle\Document\Geolocation $geolocation)
{
$this->geolocation = $geolocation;
}

/**
* Get geolocation
*
* @return Company\StoreBundle\Document\Geolocation $geolocation
*/
public function getGeolocation()
{
return $this->geolocation;
}

/**
* Set title
*
* @param string $title
*/
public function setTitle($title)
{
$this->title = $title;
}

/**
* Get title
*
* @return string $title
*/
public function getTitle()
{
return $this->title;
}
}

地理位置.php

namespace Company\StoreBundle\Document;

use Doctrine\ODM\MongoDB\Mapping\Annotations as MongoDB;

/**
* @MongoDB\EmbeddedDocument
*/
class Geolocation
{
/**
* @MongoDB\Id
*/
private $id;

/**
* @MongoDB\Float
*/
private $latitude;

/**
* @MongoDB\Float
*/
private $longitude;


/**
* Get id
*
* @return id $id
*/
public function getId()
{
return $this->id;
}

/**
* Set latitude
*
* @param float $latitude
*/
public function setLatitude($latitude)
{
$this->latitude = $latitude;
}

/**
* Get latitude
*
* @return float $latitude
*/
public function getLatitude()
{
return $this->latitude;
}

/**
* Set longitude
*
* @param float $longitude
*/
public function setLongitude($longitude)
{
$this->longitude = $longitude;
}

/**
* Get longitude
*
* @return float $longitude
*/
public function getLongitude()
{
return $this->longitude;
}
}

PlaceType.php

namespace Company\AdminBundle\Form\Type;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilder;
use Company\AdminBundle\Form\Type\GeolocationType;

class PlaceType extends AbstractType
{
public function buildForm(FormBuilder $builder, array $options)
{
$builder->add('title');

$builder->add('geolocation', new GeolocationType());

}

public function getName()
{
return 'place';
}

public function getDefaultOptions(array $options)
{
return array(
'data_class' => 'Company\StoreBundle\Document\Place',
);
}
}

GeolocationType.php

namespace Company\AdminBundle\Form\Type;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilder;

class GeolocationType extends AbstractType
{
public function buildForm(FormBuilder $builder, array $options)
{
$builder
->add('latitude')
->add('longitude');
}

public function getDefaultOptions(array $options)
{
return array('data_class' => 'Company\StoreBundle\Document\Geolocation');
}

public function getName()
{
return 'geolocation';
}
}

谢谢大家

最佳答案

我认为在这种情况下你不应该在你的 setter 方法中使用依赖...
所以而不是:

setGeolocation(\Company\StoreBundle\Document\Geolocation $geolocation)

试试这个,看看它是否正常工作:

setGeolocation($geolocation)

关于php - Symfony2 嵌入式表单和 MongoDB 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9587228/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com