Este foro ya no está activo, así que no puedes publicar nuevas preguntas ni responder a las preguntas existentes.

Error al guardar un formulario con una entidad Many to One

7 de octubre de 2015

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

#1

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