Ver Mensaje Individual
  #1 (permalink)  
Antiguo 23/09/2015, 10:19
schattenburg
 
Fecha de Ingreso: junio-2007
Mensajes: 298
Antigüedad: 16 años, 10 meses
Puntos: 5
Rescatar valores entity de un form

Hola a todos, me estoy iniciando con Symfony y por el momento me va saliendo todo, pero tengo un problema a la hora de rescatar los valores del formulario antes de hacer flush. Si los valores son normales (string, integer, etc) me hace el flush perfectamente y me lo mete en la BD.

El problema es cuando uno de los campos es de tipo entity que como lo que recibe es un objeto da error al hacer el flush.

Mi estructura sería así en el buildForm:
Código PHP:
$builder
            
->add('titulo')
            ->
add('anno')
            ->
add('idDirector''entity', array(
                
'class' => 'edcBundle:cineastas',
                
'query_builder' => function (EntityRepository $er) {
                                        return 
$er->createQueryBuilder('c')
                                      ->
orderBy('c.nombre''ASC');
                    }))
            ->
add('idActor1''entity', array(
                
'class' => 'edcBundle:cineastas',
                
'query_builder' => function (EntityRepository $er) {
                                        return 
$er->createQueryBuilder('c')
                                        ->
orderBy('c.nombre''ASC');
                    }))
            ->
add('idActor2''entity', array(
                
'class' => 'edcBundle:cineastas',
                
'query_builder' => function (EntityRepository $er) {
                                        return 
$er->createQueryBuilder('c')
                                        ->
orderBy('c.nombre''ASC');
                    }))
            ->
add('guardar''submit')
        ; 
Es decir, saca los datos de otra tabla (cineastas) que tiene los campos id y nombre. La view me la hace perfecta dibujando los combos con los datos el problema es a la hora de dar al botón del submit y meterlo en la BD. Este es mi código en el controller:
Código PHP:
public function addPeliculaAction(Request $request)
    {
         
$peliculaAux = new peliculas();
        
$form $this->createForm(new peliculasType(),$peliculaAux);
        
$form->handleRequest($request);
   
        if(
$form->isValid()) {
            
$em $this->getDoctrine()->getManager();
            
$em->persist($peliculaAux);
            
// AQUI DA EL ERROR
              
$em->flush();
            
$this->get('session')->getFlashBag()->add(
                    
'mensaje','Se ha añadido la película correctamente'
            
);
            return 
$this->redirect($this->generateUrl('listarPeliculas'));
        }
        
        return 
$this->render('edcBundle:Default:addPelicula.html.twig',
                array(
"form"=>$form->createView()));
    } 
Al hacer un print_r de peliculaAux veo q el campo idDirector es un objeto con dos campos (id y nombre) por lo que se me ocurrió hacer:
$id = peliculaAux->getIdDirector()
el cual incomprensiblemente me da el nombre, no el id, por lo que algo estaré haciendo mal.

¿Alguna idea? ¿Cómo rescato el id de ese combo del formulario?

Muchas gracias

------------------------------------

EDITO: Ya lo arregle, era una chorrada, solo había que modificar en cineastas.php la función:

public function __toString()
{
return $this->id;
}

public function __toString()
{
return (string)$this->id;
}

Ahora ya sí que me devuelve el id.

Última edición por schattenburg; 23/09/2015 a las 10:54 Razón: Lo he solucionado ya