我已經閱讀this和this和其他的,但沒有人解決了我的問題。Symfony 2嵌入式表單:可捕獲的致命錯誤:傳遞給Entity :: addProperty的參數1必須是XX MyClass的實例,給出的數組爲
我已經刪除了所有可以縮小到一個字段的地址:地址。 當我嘗試按照this tutorial時,如果我遵循它,從一個新的新項目開始,一切正常。但是,當我在我的其他項目中手動執行該操作時,出現此錯誤: 「Catchable致命錯誤:傳遞給BN \ Bundle \ MyBundle \ Entity \ PersonTeacher :: addAdresse()的參數1必須是BN \ Bundle \ MyBundle \ Entity \ Adresse,在C:\ Users \ Olivier \ PhpstormProjects \ My \ My \ src \ BN \ Bundle \ MyBundle \ Entity \ PersonTeacher.php第111行中給出的數組。
繼承人的堆棧跟蹤:
這裏是我的代碼,在那裏我已經刪除該工作性質:
我的控制器:
<?php
namespace BN\Bundle\MyBundle\Controller;
use BN\Bundle\MyBundle\Entity\PersonTeacher;
use BN\Bundle\MyBundle\Entity\Adresse;
use BN\Bundle\MyBundle\Form\Type\AdresseType;
use Symfony\Component\DependencyInjection\ContainerAware;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
class RegistrationController extends Controller
{
public function registerTeacherAction(Request $request)
{
$person = new PersonTeacher();
$form = $this->createFormBuilder($person)
->add('adresses', 'collection',
array(
'type' => new AdresseType(),
'allow_add' => true,
'by_reference' => false,
)
)
->getForm();
$form->handleRequest($request);
if ($form->isValid()) {
/**/
}
return $this->render('BNMyBundle:Registration:person_teacher.form.html.twig', array(
'form' => $form->createView(),
));
}
}
我的實體PersonTeacher :
個<?php
namespace BN\Bundle\MyBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity
* @ORM\Table(name="person_teacher")
* @ORM\Entity(repositoryClass="BN\Bundle\MyBundle\Repository\PersonTeacherRepository")
* @ORM\HasLifecycleCallbacks()
*/
class PersonTeacher extends Person
{
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/*--------- snap ---------*/
/**
* @ORM\ManyToMany(
* targetEntity="Adresse",
* inversedBy="personsTeacher",
* cascade={"persist"}
*)
* @ORM\JoinTable(name="person_teacher_adresse")
**/
private $adresses;
/*--------- snap ---------*/
public function addAdresse(\BN\Bundle\MyBundle\Entity\Adresse $adresse) {
$this->adresses[] = $adresse;
return $this;
}
public function removeAdresse(\BN\Bundle\MyBundle\Entity\Adresse $adresse) {
$this->adresses->removeElement($adresse);
}
public function getAdresses() {
return $this->adresses;
}
/*--------- snap ---------*/
public function __construct() {
parent::__construct();
$this->adresses = new \Doctrine\Common\Collections\ArrayCollection();
}
}
提示
注:我已經簽了形式正確發送,這些信息的格式正確,我也一步一步地與Xdebug的步調試,但它太複雜對我來說(但)看到我缺少的東西。
這是一個'collection'
類型的問題:如果我刪除'by_reference' => false
,那麼它的工作....只有當我不堅持它。
如果我嘗試使用此代碼堅持它:
$form->handleRequest($request);
if ($form->isValid()) {
$person=$form->getData();
$em = $this->getDoctrine()->getManager();
$em->persist($person);
$em->flush();
}
然後我得到這個錯誤:
警告:spl_object_hash()預計參數1是對象,在給定的數組(projectpath)\ vendor \ doctrine \ orm \ lib \ Doctrine \ ORM \ UnitOfWork.php line 1572
爲什麼?
如果你把'ManyToMany'改成'OneToMany'作爲測試怎麼辦? – cheesemacfly
我試圖改變另一個'ManyToMany'關係:課程(一位教師可能會給一個或多個課程,一個或多個教師可能會給一個課程)。有用。所以唯一的解釋是有一些字段或一個聲明丟失,但我真的不知道可能會丟失什麼。 –