2013-02-17 71 views
5

我有保存實體回我這個錯誤的一個問題:Symfony2的__toString()錯誤

Catchable Fatal Error: Method My\BusinessBundle\Entity\Type::__toString() 
must return a string value in 
/var/www/MyBusiness0_1/vendor/doctrine/orm/lib/Doctrine/ORM/ORMInvalidArgumentException.php line 113 

奇怪的是,該方法__的toString()是實體型!

class Type 
{ 
//.. 

/** 
* @var string 
* 
* @ORM\Column(name="type", type="string", length=100) 
*/ 
private $type; 

/** 
* @ORM\OneToMany(targetEntity="MailTelCont", mappedBy="type") 
*/ 
protected $mailTelContacts; 

public function __construct() 
{ 
    $this->mailTelContacts = new \Doctrine\Common\Collections\ArrayCollection(); 
} 

public function __toString() 
{ 
    return $this->getType(); 
} 
//... 

另一個奇怪的事情是,如果我把級聯= {「堅持」}類MailTelCont上多對一的關係「型」不顯示我這個錯誤,但在保存類型的新領域..

類MailTelCont

class MailTelCont 
{ 
//.. 
/** 
* @var string 
* 
* @ORM\Column(name="contact", type="string", length=100) 
*/ 
private $contact; 

/** 
* @ORM\ManyToOne(targetEntity="Type", inversedBy="mailTelContacts") 
* @ORM\JoinColumn(name="type_id", referencedColumnName="id") 
*/ 
private $type; 

/** 
* @ORM\ManyToOne(targetEntity="Anagrafica", inversedBy="mailTelContacts", cascade={"persist"}) 
* @ORM\JoinColumn(name="anagrafica_id", referencedColumnName="id") 
* @Assert\Type(type="My\BusinessBundle\Entity\Anagrafica") 
*/ 
private $anagrafica; 

public function __toString() 
{ 
    return $this->getContact(); 
} 

呼叫以這種方式嵌套 「AnagraficType」 的形式:

class TypeType extends AbstractType 
{ 
public function buildForm(FormBuilderInterface $builder, array $options) 
{ 
    $builder 
     ->add('type', 'entity', array(
       'class' => 'My\BusinessBundle\Entity\Type', 
       'attr' => array('class' => 'conct'), 
       'property' => 'type', 
       'label' => 'Tipologia', 
     )) 
    ; 
} 
***** 
class MailTelContType extends AbstractType 
{ 
public function buildForm(FormBuilderInterface $builder, array $options) 
{ 
    $builder 
     ->add('type', new TypeType()) 
     ->add('contact', 'text', array('label' => 'Contatto'))     
    ; 
} 
***** 
class AnagraficaType extends AbstractType 
{ 
public function buildForm(FormBuilderInterface $builder, array $options) 
{ 
    $builder->add('mailTelContacts', 'collection', array('type' => new MailTelContType(), 
       'allow_add' => true, 
       'allow_delete' => true, 
       'prototype' => true, 
       'by_reference' => false 
      )) 

我在哪裏做錯了?

回答

13

我認爲那些值是null然後。你嘗試:

public function __toString() 
{ 
    return (string) $this->getType(); 
} 

public function __toString() 
{ 
    return (string) $this->getContact(); 
} 

當值null將被強制轉換爲字符串,你不應該得到這個異常的方式。

+0

謝謝你的回覆, 但現在這個錯誤: '一個新的實體通過中沒有配置級聯的關係,「我的\ BusinessBundle \實體\ MailTelCont#型」找到持續經營的實體:Telefono。要解決這個問題:要麼顯式調用EntityManager#persist()在這個未知的實體上,要麼配置cascade在映射中堅持這個關聯,例如@ManyToOne(..,cascade = {「persist」})' 如果我把'cascade = {「persist」}'然而,在類型中保存一個新的字段,你不必因爲類型只是一個容器的聯繫類型的選擇(例如電子郵件,傳真,電話..) – Lughino 2013-02-17 17:01:20

+0

它適用於我,謝謝;) – 2014-01-03 17:39:29