Ошибка: новое значение должно быть массивом или экземпляром \ Traversable, заданного класса Entity

У меня есть manyToMany ассоциация между Post и Category . Я пытаюсь отправить форму Post, чтобы создать сообщение с выбранной категорией из раскрывающегося списка <select> .

Форма выполняет корреляцию, используя:

 <div id="form-categories-widget"> <select id="shop_bundle_managementbundle_posttype_categories" name="shop_bundle_managementbundle_posttype[categories]"> {% for key,val in form.categories.vars.choices %} <option value="{{ val.value }}" {{ form.categories.vars.value == '' and key == 0 ? ' selected ' :(val.value == form.categories.vars.value ? ' selected ' : '') }} > {{ val.data.getName | trans }} </option> {% endfor %} </select> </div> 

Проблема:

Когда я нажимаю кнопку «Отправить», у меня есть следующая ошибка (для которой я потратил около 2 дней, пытаясь выяснить):

Свойство «категории» в классе «Магазин \ Bundle \ ManagementBundle \ Entity \ Post» может быть определено с помощью методов «addCategory ()», «removeCategory ()», но новое значение должно быть массивом или экземпляром \ Traversable, «Магазин \ Bundle \ ManagementBundle \ Entity \ Category".

Вот мой тип формы и сущность (если они когда-либо полезны). Я заранее благодарю вас за ваше неоценимое время и помощь, как обычно.

Entity Post:

 <?php namespace Shop\Bundle\ManagementBundle\Entity; class Post { ..... /** * @var \Doctrine\Common\Collections\Collection */ private $categories; /** * Add category * * @param \Shop\Bundle\ManagementBundle\Entity\Category $category * * @return Post */ public function addCategory(\Shop\Bundle\ManagementBundle\Entity\Category $category) { $this->categories[$category->getName()] = $category; $category->addPost($this); return $this; } /** * Remove category * * @param \Shop\Bundle\ManagementBundle\Entity\Category $category */ public function removeCategory(\Shop\Bundle\ManagementBundle\Entity\Category $category) { $this->categories->removeElement($category); } /** * Get categories * * @return \Doctrine\Common\Collections\Collection */ public function getCategories() { return $this->categories; } } - <?php namespace Shop\Bundle\ManagementBundle\Entity; class Post { ..... /** * @var \Doctrine\Common\Collections\Collection */ private $categories; /** * Add category * * @param \Shop\Bundle\ManagementBundle\Entity\Category $category * * @return Post */ public function addCategory(\Shop\Bundle\ManagementBundle\Entity\Category $category) { $this->categories[$category->getName()] = $category; $category->addPost($this); return $this; } /** * Remove category * * @param \Shop\Bundle\ManagementBundle\Entity\Category $category */ public function removeCategory(\Shop\Bundle\ManagementBundle\Entity\Category $category) { $this->categories->removeElement($category); } /** * Get categories * * @return \Doctrine\Common\Collections\Collection */ public function getCategories() { return $this->categories; } } 

PostType

 class PostType extends AbstractType { /** * @param FormBuilderInterface $builder * @param array $options */ public function buildForm(FormBuilderInterface $builder, array $options) { $builder ->add('categories', 'entity', array( 'multiple' => false, // Multiple selection allowed 'expanded' => false, // Render as checkboxes 'class' => 'ShopManagementBundle:Category', 'property' => 'name' )); } /** * @param OptionsResolver $resolver */ public function configureOptions(OptionsResolver $resolver) { $resolver->setDefaults(array( 'data_class' => 'Shop\Bundle\ManagementBundle\Entity\Post' )); } /** * @return string */ public function getBlockPrefix() { return 'shop_bundle_managementbundle_posttype'; } } 

Solutions Collecting From Web of "Ошибка: новое значение должно быть массивом или экземпляром \ Traversable, заданного класса Entity"

Ваши категории полей должны быть CollectionType объекта, а не просто сущностью.

В вашем примере вы пытаетесь заменить $ categories, который является коллекцией объекта Category.

Прочтите это: Поле CollectionType

Но я считал, что есть недоразумение: вы пытаетесь дать несколько категорий одному сообщению? Вы изменили ситуацию? Одна категория содержит несколько сообщений?

http://symfony.com/doc/current/reference/forms/types/collection.html

Проблема исходила из шаблона формы, потому что я вручную закодировал его, забыв двойные скобки [] . Поэтому вместо:

 <select id="shop_bundle_managementbundle_posttype_categories" name="shop_bundle_managementbundle_posttype[categories]"> 

Я должен был использовать:

 <select id="shop_bundle_managementbundle_posttype_categories" name="shop_bundle_managementbundle_posttype[categories][]"> 

Я надеюсь, что другой человек не совершит ту же ошибку.

благодаря