Hola:
En mi entidad artículos tengo la siguiente relación:
/** * @ORM\ManyToOne(targetEntity="Destiny\AppBundle\Entity\Imagenes", * cascade={"persist"}) * @ORM\JoinColumn(name="imagen_id", referencedColumnName="id", onDelete="CASCADE") */ private $imagen;
Y en el formulario la tengo asi:
/** * @param FormBuilderInterface $builder * @param array $options */ public function buildForm(FormBuilderInterface $builder, array $options) { $builder ->add ('titulo', 'text', ['label' => $this->translator->trans ('articulosContenido.form.title'), 'max_length' => 150]) ->add('descripcion', 'textarea', ['label' => $this->translator->trans ('articulosContenido.form.description'), ]) ->add('imagen','entity',[ 'label' => $this->translator->trans('articulosContenido.form.imagen'), 'class' => 'DestinyAppBundle:Imagenes', 'required' => false, 'multiple' => false, 'expanded' => true, 'choice_label' => 'webPath']) ; }
Cuando tengo el atributo en 'expanded' => true
me devuelve el siguiente error:
The form's view data is expected to be of type scalar, array or an instance of \ArrayAccess, but is an instance of class Proxies\__CG__\Destiny\AppBundle\Entity\Imagenes. You can avoid this error by setting the "data_class" option to "Proxies\__CG__\Destiny\AppBundle\Entity\Imagenes" or by adding a view transformer that transforms an instance of class Proxies\__CG__\Destiny\AppBundle\Entity\Imagenes to scalar, array or an instance of \ArrayAccess.
Pero si lo tengo en false
, me lo guarda correctamente. No entiendo donde esta el fallo, ¿me podeis ayudar?
Gracias de antemano.
Respuestas
Al parecer se trata de este error de los formularios de Symfony. La solución consiste en definir la opción data_class
para el campo imagen
:
->add('imagen', 'entity', [ 'label' => $this->translator->trans('articulosContenido.form.imagen'), 'class' => 'DestinyAppBundle:Imagenes', 'data_class' => 'AppBundle\Entity\Imagenes' 'required' => false, 'multiple' => false, 'expanded' => true, 'choice_label' => 'webPath' ])
@javiereguiluz
8 octubre 2015, 22:54