Symfony - Problema al pasar id como parámetro en Symfony

 
Vista:
sin imagen de perfil

Problema al pasar id como parámetro en Symfony

Publicado por borja (1 intervención) el 27/04/2017 15:16:53
Buenos días, lo primero muchas gracias a todo el mundo por la ayuda. La verdad es que creo que es algo sencillo pero estoy empezando con Symfony y hay cosas básicas que no se hacer.

Os cuento cual es mi problema:

Estoy usando Symfony 2.7 y estoy añadiendo comentarios a un foro. El foro es como el tema y los usuarios pueden dejar su comentario. Por lo tanto un comentario tiene un cuerpo del mensaje que se llena en un formulario y también tiene el ID del usuario que lo ha escrito y el ID del foro en el que ha escrito su comentario, es este último ID el que me está costando.

El código para añadir un comentario lo tengo ordenado de la siguiente manera

En el “commentController” tengo lo siguiente:

CommentController

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
class CommentController extends Controller
{
	public function addAction($id){
		$foro = $this->getDoctrine()->getRepository('userBundle:foro')->find($id);
		$user = $this->container->get('security.context')->getToken()->getUser();
		$comment = new Comment();
		$comment->setForo($foro);
		$form = $this->createCreateForm($comment, $id);
 
		return $this->render('userBundle:Comment:add.html.twig', array('form' => $form->createView(), 'foro' => $foro, 'user' => $user));
	}
 
	private function createCreateForm(Comment $entity, $foro_id){
                 $form = $this->createForm(new CommentType(), $entity, array(
            'action' => $this->generateUrl('comment_create',array('foro_id' => $foro_id) ),
            'method' => 'POST'
        ));
 
        return $form;
    }
 
    public function createAction(Request $request, $id) {
    	$user = $this->container->get('security.context')->getToken()->getUser();
        $comment = new Comment();
        $form = $this->createCreateForm($comment);
        $form->handleRequest($request);
 
        if ($form->isValid()) {
 
            $comment->setUser($user);
            $em = $this->getDoctrine()->getManager();
            $em->persist($comment);
            $em->flush();
 
            $successMessage = $this->get('translator')->trans('The comment has been created.');
            $this->addFlash('mensaje', $successMessage);
            return $this->redirectToRoute('foro_index');
 
        }
        return $this->render('userBundle:Comment:add.html.twig', array('form' => $form->createView()));
 
    }
 
}

"addAction” es el método que se llama al clicar en el botón añadir comentario del HTML, en ese primer método no tengo problema para conseguir el ID del foro al que va dirigido el comentario.

El método "createCreateForm" es el método en que llama al formulario del comentario y es llamado desde el método "addAction" en la línea 8 y en el método "createAction" que se encuentra más abajo y se encarga de capturar los datos del formulario. Pues bien en "createCreateForm" paso por parámetros el comentario y el id del foro. Aquí ya no sé si lo estoy haciendo bien al pasar el ID. Dentro de este método entiendo que se captura la acción de mandar al formulario mediante el código "generateUrl" y se llama al método "createAction". Es en la línea 15 donde creo que esta el fallo, pero no sé cómo pasar el ID del foro.

El método "createAction" que es llamado como ya he dicho desde "createCreateForm" recibe la request y el ID del foro. Es en este método donde tiene que llegar la ID de foro, pero de la forma que he hecho me da fallo y no sé porque es, al final adjunto una imagen del fallo.

Por ultimo adjunto el routing de las rutas de los métodos. Decir que el método "createAction" usa el método POST para pasar el formulario.

El routing de los comentarios
Comment.yml
1
2
3
4
5
6
7
8
comment_add:
    path:     /add/{id}
    defaults: { _controller: userBundle:Comment:add }
 
comment_create:
    path:     /create/{foro_id}
    defaults: { _controller: userBundle:Comment:create }
    methods:  POST


Imagen del error

error

Muchas gracias a todo por vuestro tiempo y por intentar ayudar
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder