2016-03-23 42 views
0

我创建了一个“ClientType”“信息类型”“ContactType”客户端可以有多个信息和联系人所以我使用一个表格,即嵌入客户端,信息和联系人Symfony3错误embeddedin形式

当我打印表格也没关系,但只要我刷新:

Catchable Fatal Error: Argument 1 passed to Doctrine\Common\Collections\ArrayCollection::__construct() must be of the type array, object given, called in C:\wamp\www\LinkWebCRM\vendor\doctrine\orm\lib\Doctrine\ORM\UnitOfWork.php on line 605 and defined

我试图用的“信息类型”“CollectionType”和“ContactType”但后来我得到了很多形式的警告“这个值是无效的。”,“这种形式不应包含额外的领域。”,和8倍的形式对信息和联系......

ClientType:

class ClientType extends AbstractType 
{ 
    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     $builder->add('nom',   TextType::class); 
     $builder->add('prenom',   TextType::class); 
     $builder->add('informations', InformationType::class); 
     $builder->add('contacts',  ContactType::class); 
     $builder->add('Enregistrer', SubmitType::class); 
    } 

    public function configureOptions(OptionsResolver $resolver) 
    { 
     $resolver->setDefaults(array(
      'data_class' => 'CommonBundle\Entity\Client', 
     )); 
    } 
} 

信息:

class InformationType extends AbstractType 
{ 
    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     $builder->add('nomEntreprise',  TextType::class); 
     $builder->add('sIRET',    TextType::class); 
     $builder->add('typeSite',   TextType::class); 
     $builder->add('adresseEntreprise', TextType::class); 
     $builder->add('dateSignature',  DateTimeType::class, array(
      'years' => range(date("Y"), date('Y-m-d',strtotime(date("Y-m-d", time()) . " + 1825 day"))) 
      )); 
     $builder->add('nomDomaine',   TextType::class); 
     $builder->add('dateMiseEnLigne', DateTimeType::class, array(
      'years' => range(date("Y"), date('Y-m-d',strtotime(date("Y-m-d", time()) . " + 1825 day"))) 
      )); 
     $builder->add('commentaire',  TextType::class); 
    } 

    public function configureOptions(OptionsResolver $resolver) 
    { 
     $resolver->setDefaults(array('data_class' => null)); 
    } 
} 

ContactType:

class ContactType extends AbstractType 
{ 
    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     $builder->add('telephone', TextType::class); 
     $builder->add('fax',  TextType::class, array(
      'required' => false)); 
     $builder->add('email',  TextType::class); 
    } 

    public function configureOptions(OptionsResolver $resolver) 
    { 
     $resolver->setDefaults(array(
      'data_class' => 'CommonBundle\Entity\Contact', 
     )); 
    } 
} 

然后,

客户:

namespace CommonBundle\Entity; 

use Doctrine\ORM\Mapping as ORM; 
use CommonBundle\Entity\Information; 

/** 
* Client 
* 
* @ORM\Table(name="client") 
* @ORM\Entity(repositoryClass="CommonBundle\Repository\ClientRepository") 
*/ 
class Client 
{ 
    /** 
    * @ORM\OneToMany(targetEntity="CommonBundle\Entity\Information", mappedBy="client") 
    */ 
    public $informations; 

    /** 
    * @ORM\OneToMany(targetEntity="CommonBundle\Entity\Contact", mappedBy="client") 
    */ 
    public $contacts; 

    /** 
    * Constructor 
    */ 
    public function __construct() 
    { 
     $this->informations = new \Doctrine\Common\Collections\ArrayCollection(); 
    } 

    /** 
    * Add information 
    * 
    * @param \CommonBundle\Entity\Information $information 
    * 
    * @return Client 
    */ 
    public function addInformation(\CommonBundle\Entity\Information $information) 
    { 
     $this->informations[] = $information; 

     return $this; 
    } 

    /** 
    * Remove information 
    * 
    * @param \CommonBundle\Entity\Information $information 
    */ 
    public function removeInformation(\CommonBundle\Entity\Information $information) 
    { 
     $this->informations->removeElement($information); 
    } 

    /** 
    * Get informations 
    * 
    * @return \Doctrine\Common\Collections\Collection 
    */ 
    public function getInformations() 
    { 
     return $this->informations; 
    }  

    /** 
    * Add contact 
    * 
    * @param \CommonBundle\Entity\Contact $contact 
    * 
    * @return Client 
    */ 
    public function addContact(\CommonBundle\Entity\Contact $contact) 
    { 
     $this->contacts[] = $contact; 

     return $this; 
    } 

    /** 
    * Remove contact 
    * 
    * @param \CommonBundle\Entity\Contact $contact 
    */ 
    public function removeContact(\CommonBundle\Entity\Contact $contact) 
    { 
     $this->contacts->removeElement($contact); 
    } 

    /** 
    * Get contacts 
    * 
    * @return \Doctrine\Common\Collections\Collection 
    */ 
    public function getContacts() 
    { 
     return $this->contacts; 
    } 
} 

信息:

namespace CommonBundle\Entity; 

use Doctrine\ORM\Mapping as ORM; 
use CommonBundle\Entity\Client; 

/** 
* Information 
* 
* @ORM\Table(name="information") 
* @ORM\Entity(repositoryClass="CommonBundle\Repository\InformationRepository") 
*/ 
class Information 
{ 
    /** 
    * @ORM\ManyToOne(targetEntity="CommonBundle\Entity\Client", inversedBy="informations") 
    * @ORM\JoinColumn(nullable=false) 
    */ 
    public $client; 

    /** 
    * Set client 
    * 
    * @param \CommonBundle\Entity\Client $client 
    * 
    * @return Information 
    */ 
    public function setClient(\CommonBundle\Entity\Client $client) 
    { 
     $this->client = $client; 

     return $this; 
    } 

    /** 
    * Get client 
    * 
    * @return \CommonBundle\Entity\Client 
    */ 
    public function getClient() 
    { 
     return $this->client; 
    } 
} 

而且联系人:

namespace CommonBundle\Entity; 

use Doctrine\ORM\Mapping as ORM; 

/** 
* Contact 
* 
* @ORM\Table(name="contact") 
* @ORM\Entity(repositoryClass="CommonBundle\Repository\ContactRepository") 
*/ 
class Contact 
{ 

    /** 
    * @ORM\ManyToOne(targetEntity="CommonBundle\Entity\Client", inversedBy="contacts") 
    * @ORM\JoinColumn(nullable=true) 
    */ 
    public $client; 

    /** 
    * Set client 
    * 
    * @param \CommonBundle\Entity\Client $client 
    * 
    * @return Contact 
    */ 
    public function setClient(\CommonBundle\Entity\Client$client = null) 
    { 
     $this->client = $client; 

     return $this; 
    } 

    /** 
    * Get client 
    * 
    * @return \CommonBundle\Entity\Client 
    */ 
    public function getClient() 
    { 
     return $this->client; 
    } 
} 

回答

0

所以,因为集合的,我要创建信息的一个实例。 然后我水合它这样:

$information->setNameVariable($client->getInformations()['nameVariable']) 

注意,从$客户机 - > getInformations()中的“信息”是不是一个对象的时刻,但形式的阵列,这是问题。

这对所有形式相反的变量与预期相反。 最后我加了var不可空,坚持对象,重复逻辑“联系人”然后刷新。

我也不得不在__constructor客户补充:

$this->contacts = new \Doctrine\Common\Collections\ArrayCollection(); 

而对于ClientType:

$builder->add('informations', InformationType::class, array(
     'data_class' => null));