我尝试将一个表单类型嵌入另一个表单类型:
$builder->add('geolocation',new GeolocationType());
但是当我尝试绑定请求到表单
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; } }
Geolocation.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方法中使用依赖关系
所以代替:
原文链接:https://www.f2er.com/php/140171.html所以代替:
setGeolocation(\Company\StoreBundle\Document\Geolocation $geolocation)
尝试这样看看它是否正常工作:
setGeolocation($geolocation)