2014-08-29 70 views
0

Domain form多对一的关系:ArrayCollection问题

我在域和站点之间有多对一的关系。但是,当我尝试添加一个新的领域我有这样的错误:

类型学说\ COMMON \收藏\ ArrayCollection的上 协会Eliophot \ BackBundle \实体\域#网站,但预计 Eliophot \ BackBundle的

找到实体\实体\网站

这是我的网域控制器:

public function createDomainAction(Request $request) 
    { 
     $domain = new Domain; 

     if (!$domain) { 
      throw $this->createNotFoundException('Unable to find Domain entity.'); 
     } 

     $newForm = $this->createForm(new DomainType(), $domain); 

     $newForm->handleRequest($request); 

     if ($newForm->isValid()) { 
      $entityManager = $this->get('doctrine')->getManager(); 
      $entityManager->persist($domain); 
      $entityManager->flush(); 
      $this->get('session')->getFlashBag()->add('success', 'Le domaine a été crée'); 

      return $this->redirect($this->generateUrl('domain_list')); 
     } 

     return $this->render('EliophotBackBundle:Domain:new_domain.html.twig', array(
      'domain' => $domain, 
      'form' => $newForm->createView(), 
     )); 
    } 

这是我DomainType:

class DomainType extends AbstractType 
{ 
    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     $builder 
      ->add('domainName','text', array(
       'label' => 'Nom du domaine' 
      )) 
      ->add('site','entity', array(
       'class' => 'EliophotBackBundle:Site', 
       'property' => 'name', 
       'label' => 'Sélectionnez un ou plusieurs site(s)', 
       'multiple' => true 
      )); 
    } 

    public function getName() 
    { 
     return 'domain'; 
    } 
... 
} 

和我SiteType:

class SiteType extends AbstractType 
{ 
    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     $builder 
      ->add('name', 'text', array(
       'label' => 'Nom du site', 
       'required' => true 
      )) 
      ->add('nameBundle', 'text', array(
       'label' => 'Nom du bundle du site', 
       'required' => true 
      )) 
      ->add('numClient', 'integer', array(
       'label' => 'Numéro client du site', 
       'required' => true 
      )); 
    } 

    public function getName() 
    { 
     return 'site'; 
    } 
... 
} 

网站实体:

/** 
* Site 
* 
* @ORM\Table() 
* @ORM\Entity(repositoryClass="Eliophot\BackBundle\Entity\SiteRepository") 
*/ 
class Site 
{ 
    /** 
    * @var integer 
    * 
    * @ORM\Column(name="id", type="integer") 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    private $id; 

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

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

    /** 
    * @var integer 
    * 
    * @ORM\Column(name="num_client", type="integer") 
    */ 
    private $numClient; 

    /** 
    * @ORM\OneToMany(targetEntity="Domain", mappedBy="site") 
    */ 
    protected $domains; 

    /** 
    * Initialisation 
    */ 
    public function __construct() 
    { 
     $this->domains = new ArrayCollection(); 
    } 

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

    /** 
    * Set name 
    * 
    * @param string $name 
    * @return Site 
    */ 
    public function setName($name) 
    { 
     $this->name = $name; 

     return $this; 
    } 

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

    /** 
    * Set nameBundle 
    * 
    * @param $nameBundle 
    * @return $this 
    */ 
    public function setNameBundle($nameBundle) 
    { 
     $this->nameBundle = $nameBundle; 

     return $this; 
    } 

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

    /** 
    * Set numClient 
    * 
    * @param integer $numClient 
    * @return Site 
    */ 
    public function setNumClient($numClient) 
    { 
     $this->numClient = $numClient; 

     return $this; 
    } 

    /** 
    * Get numClient 
    * 
    * @return integer 
    */ 
    public function getNumClient() 
    { 
     return $this->numClient; 
    } 

    /** 
    * Get domains 
    * 
    * @return ArrayCollection 
    */ 
    public function getDomains() 
    { 
     return $this->domains; 
    } 

    /** 
    * Set domains 
    * 
    * @param ArrayCollection $domains 
    */ 
    public function setDomains(ArrayCollection $domains) 
    { 
     $this->domains = $domains; 
    } 
} 

域实体:

/** 
* Domain 
* 
* @ORM\Table() 
* @ORM\Entity 
*/ 
class Domain 
{ 
    /** 
    * @var integer 
    * 
    * @ORM\Column(name="id", type="integer") 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    private $id; 

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

    /** 
    * @ORM\ManyToOne(targetEntity="Site", inversedBy="domains") 
    * @ORM\JoinColumn(name="site_id", referencedColumnName="id") 
    */ 
    protected $site; 


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

    /** 
    * Set domainName 
    * 
    * @param string $domainName 
    * @return Domain 
    */ 
    public function setDomainName($domainName) 
    { 
     $this->domainName = $domainName; 

     return $this; 
    } 

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

    public function getSite() 
    { 
     return $this->site; 
    } 

    public function setSite($site) 
    { 
     $this->site = $site; 

     return $this; 
    } 
} 

像错误说,我认为Symfony的预期站点对象,而不是一个arrayCollection ...当我加入后请求var_dump时,我得到这个网站字段(在这个例子中我已经选择了“现场德试验1”和“位点解试验2”):

array(2) { [0]=> string(1) "1" [1]=> string(1) "2" } 

=>这应该被添加到该域的域表2新的生产线中的问题

那么我该如何做到这一点?

+0

你能显示你的实体类吗? – sebbo 2014-08-29 08:24:42

+0

是的,看看,我编辑我的答案添加2实体类:) – DOZ 2014-08-29 08:32:38

+0

而你试图达到的是,一个网站可以有多个域的权利? – sebbo 2014-08-29 08:39:35

回答

1

看来你正试图以相反的方式关联对象。您的前端显示一个表单,用户可以输入一个域名并选择应与该域名关联的网站。

从我的角度来看,您应该创建一个表单,用户输入网站名称并选择要关联的域。只是相反。

+0

好吧,我会尝试。谢谢 :) – DOZ 2014-08-29 09:11:51