2016-12-29 119 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. 

我不明白我的代码发生了什么。

这是我的FormType:

<?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; 
    } 
} 

有人可以帮我解决我的问题呢?

最好的问候,

回答

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