Ver Mensaje Individual
  #15 (permalink)  
Antiguo 21/11/2014, 13:49
Avatar de Dundee
Dundee
 
Fecha de Ingreso: junio-2002
Ubicación: El Médano
Mensajes: 1.310
Antigüedad: 21 años, 9 meses
Puntos: 8
Respuesta: Warning: spl_object_hash() expects parameter 1 to be object, integer given

Cita:
Iniciado por hhs Ver Mensaje
Código PHP:
Ver original
  1. public function newBranchAction($id){
  2.         $em = $this->getDoctrine()->getManager();
  3.         //buscar la rama padre para este id
  4.         $parent = $em->getRepository('MainBundle:Book')->find($id);
  5.  
  6.         $book = new Book();
  7.         //asignas el parent
  8.         $book->setParentBranch($parent);
  9.  
  10.         $form = $this->createForm(new NewPhrase(),$book, array(
  11.                 'action' => $this->generateUrl('url_que_procesa_accion'),
  12.                 'method' => 'POST',
  13.             ));
  14.         //cuando se crea el formulario el campo parentBranch ya tiene el objeto que deseas
  15.         return $this->render('BookMainBundle:Default:new_branch.html.twig', array(
  16.                 'form' => $form->createView(),
  17.             ));
  18.  
  19.     }
Para manejar la inserción creas otro método
Código PHP:
Ver original
  1. public function createBranchAction(Request $request){
  2.         $book = new Book();
  3.  
  4.         $form = $this->createForm(new NewPhrase(),$book, array(
  5.                 'action' => $this->generateUrl('url_que_procesa_accion'),
  6.                 'method' => 'POST',
  7.             ));
  8.  
  9.         $form->handleRequest($request);
  10.  
  11.         if($form->isValid())
  12.         {
  13.             $em = $this->getDoctrine()->getManager();
  14.             $em->persist($book);
  15.             $em->flush();
  16.  
  17.             $this->get('session')->getFlashBag()->add(
  18.                 'success',
  19.                 'Se inserto correctamente'
  20.             );
  21.  
  22.             return $this->redirect($this->generateUrl('branch_show', array('id' => $book->getId())));
  23.         }
  24.  
  25.         return $this->render('BookMainBundle:Default:create_branch.html.twig', array(
  26.                 'book' => $book,
  27.                 'form' => $form->createView(),
  28.             ));
  29.  
  30.     }
Para ver si entiendo tu código esto creo que es lo que hace.

1 Primeramente buscas el "objeto" medianta su ID que se ha pasado a ese método de la forma que sea GET, PÔST o como sea.

2 Luego creas la nueva rama (aquí se llama Book a la clase, pero ya la he cambiado por branch que creo que es más claro).

3 A la propiedad de la clase Book del nuevo objeto creado la "asocio" a la PARENT (lo que sería su foreign key), para establecer la relación.

Pero ahora no entiendo porque creas un form, puesto que el PARENT no tiene que mostrarse en ningún form (sería un campo hidden en todo caso).

Bajo mi punto de vista un método solo es suficiente.

1 Obtener el objeto como tu haces mediante la ID
2 Crear el form y allí crear la nueva rama y pasarle (hidden o como sea) el PARENT, luego guardar y listo.

No entiendo como en el segundo método createBranchActio "sabes" de forma automática cual es el PARENT del nuevo BOOK, además estas creando un nuevo BOOK , no es el mismo del otro método. Lo siento pero debo ser muy torpe, pero ahí me perdí. Es que en createBranchActio no se menciona para nada a parent, y si lo vas a guardar en la db lo guardaría como NULL.

Gracias de antemano.
__________________
Videotutoriales de Drupal