2016-12-29 2 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

DataTableのデータを保存しながら、それは配列を必要としていますがuserオブジェクトを渡しました。 'users'のフォームビルダーに'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

関連する問題