Formulario Symfony2 – Muchos a muchos como texto que causa errores

He intentado buscar una posible solución a esto, pero sin suerte.

Lo que tengo es una relación Muchos a muchos entre propiedades y códigos postales, no puedo mostrar los códigos postales en una selección, por ejemplo, debido a la cantidad de entradas posibles.

Mi solución fue tenerlo como un campo de texto en el formulario y luego atraparlo en PrePersist para buscar el registro coincidente y luego aplicarlo a la entidad antes de persistir al db.

El problema es cuando el formulario está validando, todavía está tratando de pasar el valor de cadena al setter que está esperando un objeto de entidad.

¿Hay alguna forma de evitar que esto cause un error?

He adjuntado mi código de formulario para usted.

Gracias,

Acosar

$propertyData = new PropertyData(); $builder ->add('reference') ->add('listing_type', 'choice', array('choices' => $propertyData->getListingTypes())) ->add('listing_status', 'choice', array('choices' => $propertyData->getStatusList())) ->add('title') ->add('house_number') ->add('address_line_1') ->add('address_line_2') ->add('town', 'text', array('data_class'=> 'Minos\Bundle\PropertyBundle\Entity\UtilTown')) ->add('county') ->add('country') ->add('council') ->add('region') ->add('postcode', 'text', array('data_class'=> 'Minos\Bundle\PropertyBundle\Entity\UtilPostcode')) ->add('short_description') ->add('long_description') ->add('size_sq_ft') ->add('floor_level') ->add('property_age') ->add('tenure_type', 'choice', array('choices' => $propertyData->getTenureTypes())) ->add('garage') ->add('num_living_rooms') ->add('num_bathrooms') ->add('num_bedrooms') ->add('num_floors') ->add('num_receptions') ->add('property_type') //->add('prices') ; 

Necesita un transformador de datos para convertir su entrada de cadena a una entidad antes de procesar el formulario.

  $builder // ... ->add('postcode', 'text', array( 'data_class'=> 'Minos\Bundle\PropertyBundle\Entity\UtilPostcode' )) // ... ; $builder->get('postcode')->addModelTransformer(new CallbackTransformer( //Render an entity to a string to display in the text input function($originalInput){ $string = $originalInput->getPostcode(); return $string; }, //Take the form submitted value and convert it before processing. //$submittedValue will be the string because you defined // it in the builder that way function($submittedValue){ //Do whatever to fetch the postcodes entity: $postcodeEntity = $entityManager->find('AppBundle\postcodes', $submittedValue); return $postcodeEntity; } )); 

Esto es solo un ejemplo (no lo he probado), necesitará cambiar algunas cosas para que coincida con el aspecto de sus entidades.