Hola que tal? Estoy teniendo algunos problemas a la hora de registrar los datos de un formulario embebido para una relación OneToMany.
LugarType
:
public function buildForm(FormBuilderInterface $builder, array $options) { $builder ->add('nombre') ->add('descripcion') ->add('direccion') ->add('coordenadas') ->add('facebook') ->add('twitter') ->add('detalles', new DetalleLugarType(), array('data_class'=> null)) // agregue el data_class=>null, porque sino me daba error de que tengo que convertir el formulario de arrayCollection a una vista o algo así. // y esta forma de agregar el form embebido como una colección, no me muestra nada en twig! :S //->add('detalles', 'collection', array('type'=> new DetalleLugarType(), 'allow_add'=> true )) ; }
DetalleLugarType
:
public function buildForm(FormBuilderInterface $builder, array $options) { $builder->add('urlFoto'); }
Twig:
<div id="contenedor_file" class=""form-group> <a href="#" id="foto_add" data-toggle="tooltip" title="Agregar Foto"> <i class="fa fa-plus-circle abmButtonAdd"></i> </a> {{ form_row(form.detalles) }} </div> <script> $(document).ready(function(){ $('#contenedor_file input').each(function(){ $(this).attr('name', $(this).attr('name') + '[0]'); }); $('#foto_add').click(function(e){ //var name = "" + $('#em_eventosbundle_lugar_detalles_urlFoto').attr('name'); //var indice = parseInt(name.substr(name.length - 2 , 1)); $('#em_eventosbundle_lugar_detalles_urlFoto').clone().appendTo('#contenedor_file'); var indice = -1; $('#contenedor_file input').each(function(){ indice ++; var name = "" + $(this).attr('name'); var nuevo_name = name.substr(0, name.length - 3); nuevo_name = nuevo_name + '[' + indice + ']'; $(this).attr('name', nuevo_name ); }); e.preventDefault(); }); }); </script>
Controller:
{ $em = $this->getDoctrine()->getManager(); $entity = new Lugar(); $errores = false; $form = $this->createCreateForm($entity); $form->handleRequest($request); if ($form->isValid()) { $results = $request->request->get('em_eventosbundle_lugar'); $arrayFotos = $results['detalles']['urlFoto']; for($i=0; $i < count($arrayFotos); $i ++){ $entity->setFotoLugar($arrayFotos[$i]); } //echo "Entidad: "; //var_dump($entity); //die(); $em->persist($entity); $em->flush(); } else { //var_dump($form->getErrors()); } $entities = $em->getRepository('EventosBundle:Lugar')->findAll(); return $this->render('EventosBundle:Lugar:index.html.twig', array( 'entities' => $entities, 'entidad' => $entity, 'errores' => $errores, 'form' => $form->createView(), 'accion' => 'add', )); }
Esto trae el var_dump()
comentado:
Entidad:
object(EM\EventosBundle\Entity\Lugar)[510] private 'id' => null private 'nombre' => string 'Villa gral. Belgrano' (length=4) private 'descripcion' => null private 'direccion' => null private 'coordenadas' => null private 'facebook' => null private 'twitter' => null private 'eventos' => object(Doctrine\Common\Collections\ArrayCollection)[509] private 'elements' => array (size=0) empty private 'detalles' => object(Doctrine\Common\Collections\ArrayCollection)[508] private 'elements' => array (size=3) 'urlFoto' => array (size=2) ... 0 => string 'Texto de prueba 1' (length=17) 1 => string 'Texto de prueba 2' (length=17)
Pero cuando quiero hacer:
$em->persist($entity); $em->flush();
me sale esta excepción! :S
ContextErrorException: Warning: spl_object_hash() expects parameter 1 to be object, array given in C:\xampp\htdocs\EM\vendor\doctrine\orm\lib\Doctrine\ORM\UnitOfWork.php line 1367
¿Alguien puede ayudarme ? Gracias! :)