2016-12-29 3 views
0

내 코드에 문제가 있습니다.엔티티 유형이있는 Symfony ManyToMany

The property "users" in class "Wiki\AdminBundle\Entity\Post" can be defined with the methods "addUser()", "removeUser()" but the new value must be an array or an instance of \Traversable, "Wiki\AdminBundle\Entity\User" given. 

내 코드에 일어난 이해하지 않습니다이 오류가 있습니다.

<?php 

namespace Wiki\AdminBundle\Form; 

use Doctrine\ORM\EntityRepository; 
use Symfony\Bridge\Doctrine\Form\Type\EntityType; 
use Symfony\Component\Form\AbstractType; 
use Symfony\Component\Form\FormBuilderInterface; 
use Symfony\Component\Form\Extension\Core\Type\SubmitType; 
use Symfony\Component\OptionsResolver\OptionsResolver; 
use Symfony\Component\Validator\Tests\Fixtures\Entity; 
use Wiki\AdminBundle\Entity\Post; 

class PostType extends AbstractType 
{ 
    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     $builder 
      ->add('title') 
      ->add('users', EntityType::class, [ 
       'class' => 'WikiAdminBundle:User', 
       'choice_label' => 'username', 
      ]) 
      ->add('status') 
      ->add('save', SubmitType::class) 
     ; 
    } 

    public function configureOptions(OptionsResolver $resolver) 
    { 
     $resolver->setDefaults([ 
      'data_class' => Post::class, 
     ]); 
    } 
} 

그리고 여기 내 포스트 엔티티 :

<?php 

namespace Wiki\AdminBundle\Entity; 

use Doctrine\Common\Collections\ArrayCollection; 
use Doctrine\ORM\Mapping as ORM; 
use Wiki\AdminBundle\Traits\Entity as EntityTraits; 
use Gedmo\Mapping\Annotation as Gedmo; 
use Symfony\Component\Validator\Constraints as Assert; 

/** 
* @ORM\Entity 
* @ORM\Table(name="post") 
* @ORM\Entity(repositoryClass="Wiki\AdminBundle\Entity\Repository\PostRepository") 
* @ORM\HasLifecycleCallbacks 
*/ 
class Post 
{ 
    use EntityTraits\IdTrait; 
    use EntityTraits\DateCreated; 

    /** 
    * @ORM\Column(name="title", type="text") 
    */ 
    private $title; 

    /** 
    * @ORM\ManyToMany(targetEntity="Wiki\AdminBundle\Entity\User", mappedBy="posts", cascade={"persist"}) 
    * @ORM\Column(name="author", type="text") 
    */ 
    private $users; 

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

    public function __construct() 
    { 
     $this->users = new ArrayCollection(); 
    } 

    /** 
    * @return mixed 
    */ 
    public function getTitle() 
    { 
     return $this->title; 
    } 

    /** 
    * @param mixed $title 
    */ 
    public function setTitle($title) 
    { 
     $this->title = $title; 
    } 

    /** 
    * @return mixed 
    */ 
    public function getStatus() 
    { 
     return $this->status; 
    } 

    /** 
    * @param mixed $status 
    */ 
    public function setStatus($status) 
    { 
     $this->status = $status; 
    } 

    public function addUser(User $user) 
    { 
     $this->users->add($user); 
     $user->addPost($this); 
    } 

    public function removeUser(User $user) 
    { 
     $this->users->removeElement($user); 
    } 

    /** 
    * @return mixed 
    */ 
    public function getUsers() 
    { 
     return $this->users; 
    } 
} 

누군가가 내 문제를 해결하기 위해 나를 도와 줄 수

이 내 FormType입니까?

안부,

답변

1

데이터 테이블에서 데이터를 저장하지만 user 오브젝트를 통과하면서 배열을 필요로한다. '사용자'의 양식 작성 도구에 'multiple' => true을 추가하십시오.

public function buildForm(FormBuilderInterface $builder, array $options) 
{ 
    $builder 
     ->add('title') 
     ->add('users', EntityType::class, [ 
      'class' => 'WikiAdminBundle:User', 
      'multiple' => true, 
      'choice_label' => 'username', 
     ]) 
     ->add('status') 
     ->add('save', SubmitType::class) 
    ; 
} 

참고'multiple' => true이 어레이 형 제어 대신 객체를 생성한다.

Ref Here

관련 문제