2017-03-20 5 views
0

プロバイダを作成するときに間違いがあります。Symfony FormTypeエラー

選択フィールドに渡されるエンティティは管理する必要があります。おそらくエンティティマネージャにそれらを保持しますか?

私にformType PrestataireType

/** 
* @var bool $admin 
*/ 
private $admin; 

/** 
* @var User $user 
*/ 
private $user; 

/** 
* DemandeType constructor. 
* @param bool|false $admin 
*/ 
public function __construct($admin = false, $user, $badges = null) 
{ 
    $this->admin = $admin; 
    $this->user = $user; 
} 

/** 
* {@inheritdoc} 
*/ 
public function buildForm(FormBuilderInterface $builder, array $options) 
{ 
    $builder 
     ->add('files', FileType::class, array(
       'required' => false, 
       'attr' => array('class' => 'hidden') 
      ) 
     ) 
     ->add('name') 
     ->add('address') 
     ->add('city') 
     ->add('zipcode') 
     ->add('phone') 
     ->add('email') 
     ->add('dateStartContract') 
     ->add('dateEndContract') 
     ->add('frequency') 
     ->add('intervention', CollectionType::class, array(
      'entry_type' => EntityType::class, 
      'entry_options' => array(
       'class'  => 'AppBundle:Intervention', 
       'expanded' => false, 
       'choice_label' => 'id' 
      ), 
      'allow_add' => true, 
      'allow_delete' => true, 
      'invalid_message' => "Un destinataire n'existe pas", 
     )); 
    if ($this->user->getResidence() != $this->admin) { 
     $builder->add('residence', EntityType::class, array(
      'class' => 'AppBundle:Residence', 
      'choices' => $this->user->getResidence(), 
     )); 
    } else { 
     $builder->add('residence', 'entity', array(
      'class' => 'AppBundle:Residence', 
      'choice_label' => 'name', 
     )); 
    } 
    ; 
} 

マイエンティティPrestataire.php

/** 

* Prestataire * * @ORMの\表(名= "prestataire") * @ORM \エンティティ(repositoryClass = "AppBundle \ Repository \ PrestataireRepository") */ クラスPrestataire { /** * @var INT * * @ORMの\カラム(名= "ID"、タイプ= "整数") * @ORMの\番号 * @ORM \ GeneratedValue(= "AUTO" 戦略) */ private $ id;

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

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

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

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

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

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

/** 
* @var \DateTime 
* 
* @ORM\Column(name="date_start_conttract", type="date") 
*/ 
private $dateStartContract; 

/** 
* @var \DateTime 
* 
* @ORM\Column(name="date_end_contract", type="date") 
*/ 
private $dateEndContract; 

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

/** 
* @var \DateTime 
* 
* @ORM\Column(name="date_create", type="date") 
*/ 
private $dateCreate; 

/** 
* @ORM\ManyToMany(targetEntity="AppBundle\Entity\Residence", inversedBy="prestataire") 
* @ORM\JoinTable(name="prestataire_resid", 
*  joinColumns={@ORM\JoinColumn(name="prestataire_id", referencedColumnName="id")}, 
*  inverseJoinColumns={@ORM\JoinColumn(name="residence_id", referencedColumnName="id")} 
*) 
*/ 
private $residence; 

/** 
* Temp file 
* @var File $file 
*/ 
public $files; 

/** 
* @var 
* @ORM\ManyToMany(targetEntity="AppBundle\Entity\Upload", cascade={"remove", "persist"}) 
*/ 
private $uploads; 

/** 
* @ORM\OneToMany(targetEntity="AppBundle\Entity\Intervention", mappedBy="prestataire", cascade={"persist","remove"}) 
* @ORM\JoinColumn(nullable=true) 
*/ 
private $intervention; 

/** 
* Prestataire constructor. 
*/ 
public function __construct() 
{ 
    $this->residence = new ArrayCollection(); 
    $this->uploads = new ArrayCollection(); 
    $this->dateCreate = new \DateTime(); 
    $this->updatedAt = clone $this->dateCreate; 
    $this->intervention = new ArrayCollection(); 
} 

function getResidence(){ 
    return $this->residence; 
} 

/** 
* Add residence 
* 
* @param \AppBundle\Entity\Residence $residence 
* 
* @return Prestataire 
*/ 
public function addResidence(\AppBundle\Entity\Residence $residence) 
{ 
    $this->residence[] = $residence; 

    return $this; 
} 

/** 
* Remove residence 
* 
* @param \AppBundle\Entity\Residence $residence 
*/ 
public function removeResidence(\AppBundle\Entity\Residence $residence) 
{ 
    $this->residence->removeElement($residence); 
} 

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

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

    return $this; 
} 

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

/** 
* Set address 
* 
* @param string $address 
* 
* @return Prestataire 
*/ 
public function setAddress($address) 
{ 
    $this->address = $address; 

    return $this; 
} 

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

/** 
* Set city 
* 
* @param string $city 
* 
* @return Prestataire 
*/ 
public function setCity($city) 
{ 
    $this->city = $city; 

    return $this; 
} 

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

/** 
* Set zipcode 
* 
* @param string $zipcode 
* 
* @return Prestataire 
*/ 
public function setZipcode($zipcode) 
{ 
    $this->zipcode = $zipcode; 

    return $this; 
} 

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

/** 
* Set phone 
* 
* @param string $phone 
* 
* @return Prestataire 
*/ 
public function setPhone($phone) 
{ 
    $this->phone = $phone; 

    return $this; 
} 

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

/** 
* Set email 
* 
* @param string $email 
* 
* @return Prestataire 
*/ 
public function setEmail($email) 
{ 
    $this->email = $email; 

    return $this; 
} 

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

/** 
* Set dateStartContract 
* 
* @param \DateTime $dateStartContract 
* 
* @return Prestataire 
*/ 
public function setDateStartContract($dateStartContract) 
{ 
    $this->dateStartContract = $dateStartContract; 

    return $this; 
} 

/** 
* Get dateStartContract 
* 
* @return \DateTime 
*/ 
public function getDateStartContract() 
{ 
    return $this->dateStartContract; 
} 

/** 
* Set dateEndContract 
* 
* @param \DateTime $dateEndContract 
* 
* @return Prestataire 
*/ 
public function setDateEndContract($dateEndContract) 
{ 
    $this->dateEndContract = $dateEndContract; 

    return $this; 
} 

/** 
* Get dateEndContract 
* 
* @return \DateTime 
*/ 
public function getDateEndContract() 
{ 
    return $this->dateEndContract; 
} 

/** 
* Set frequency 
* 
* @param string $frequency 
* 
* @return Prestataire 
*/ 
public function setFrequency($frequency) 
{ 
    $this->frequency = $frequency; 

    return $this; 
} 

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

/** 
* Set dateCreate 
* 
* @param \DateTime $dateCreate 
* 
* @return Prestataire 
*/ 
public function setDateCreate($dateCreate) 
{ 
    $this->dateCreate = $dateCreate; 

    return $this; 
} 

/** 
* Get dateCreate 
* 
* @return \DateTime 
*/ 
public function getDateCreate() 
{ 
    return $this->dateCreate; 
} 

/** 
* Add upload 
* 
* @param \AppBundle\Entity\Upload $upload 
* 
* @return Prestataire 
*/ 
public function addUpload(\AppBundle\Entity\Upload $upload) 
{ 
    $this->uploads[] = $upload; 

    return $this; 
} 

/** 
* Remove upload 
* 
* @param \AppBundle\Entity\Upload $upload 
*/ 
public function removeUpload(\AppBundle\Entity\Upload $upload) 
{ 
    $this->uploads->removeElement($upload); 
} 

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

/** 
* Set updatedAt 
* 
* @param \DateTime $updatedAt 
* 
* @return Prestataire 
*/ 
public function setUpdatedAt($updatedAt) 
{ 
    $this->updatedAt = $updatedAt; 

    return $this; 
} 

/** 
* Get updatedAt 
* 
* @return \DateTime 
*/ 
public function getUpdatedAt() 
{ 
    return $this->updatedAt; 
} 

/** 
* Add intervention 
* 
* @param \AppBundle\Entity\Intervention $intervention 
* 
* @return Prestataire 
*/ 
public function addIntervention(\AppBundle\Entity\Intervention $intervention) 
{ 
    $this->intervention[] = $intervention; 

    return $this; 
} 

/** 
* Remove intervention 
* 
* @param \AppBundle\Entity\Intervention $interventions 
*/ 
public function removeIntervention(\AppBundle\Entity\Intervention $interventions) 
{ 
    $this->intervention->removeElement($interventions); 
} 

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

}

助けてくれてありがとう。

private $interventions; 

は、その後、あなたにformTypeでこれを一致させる必要があります:

答えて

0

は、私はあなたのエンティティに複数あるためにあなたのフィールド$介入を設定する必要があると思う

// ... 
->add('interventions', CollectionType::class, array(
// ... 

とのあなたメソッドの追加/削除:

public function addIntervention(\AppBundle\Entity\Intervention $intervention) 
{ 
    $this->interventions[] = $intervention; 

    return $this; 
} 

public function removeIntervention(\AppBundle\Entity\Intervention $interventions) 
{ 
    $this->interventions->removeElement($interventions); 
} 
関連する問題