objetos lista iteratoraggregate crear array php forms symfony doctrine2 many-to-many

lista - php object



Error: el nuevo valor debe ser una matriz o una instancia de / Traversable, clase Entidad dada (2)

Las "categorías" de su campo deben ser un tipo de colección de entidad y no solo una entidad.

En su ejemplo, intenta reemplazar $ categorías que es una colección por una entidad de Categoría.

Lea esto: CollectionType Field

Pero yo era de la opinión de que hay un malentendido: ¿intentas dar múltiples categorías a una sola publicación? ¿Has invertido la cosa? Una categoría contiene varias publicaciones?

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

Tengo una asociación manyToMany entre Post y Category . Estoy intentando enviar el formulario de publicación para crear una publicación con la categoría seleccionada del menú desplegable <select> .

El formulario está traduciendo la corrección usando:

<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>

El problema:

Cuando hago clic en el botón de enviar, tengo el siguiente error (por el que he pasado aproximadamente 2 días tratando de descubrirlo):

Las "categorías" de propiedades de la clase "Comprar / Paquete / ManagementBundle / Entity / Post" se pueden definir con los métodos "addCategory ()", "removeCategory ()" pero el nuevo valor debe ser una matriz o una instancia de / Traversable, "Tienda / Bundle / ManagementBundle / Entity / Category" dado.

Aquí están mi tipo de formulario y entidad (si alguna vez son útiles). Le agradezco de antemano por su invaluable tiempo y ayuda, como de costumbre.

Publicación de la entidad:

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

Tipo de mensaje

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


El problema provenía de la plantilla de formulario porque lo codificaba manualmente, olvidando los corchetes dobles [] . Entonces, en lugar de:

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

Debería haber estado usando:

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

Espero que otra persona no cometa el mismo error.

Gracias