Buenas prácticas oficiales de Symfony

7.4. Procesando el envío de formularios

El procesamiento de los formularios Symfony en los controladores debería seguir la siguiente estructura:

public function newAction(Request $request)
{
    // crear el formulario ...

    $form->handleRequest($request);

    if ($form->isSubmitted() && $form->isValid()) {
        $em = $this->getDoctrine()->getManager();
        $em->persist($post);
        $em->flush();

        return $this->redirect($this->generateUrl(
            'admin_post_show',
            array('id' => $post->getId())
        ));
    }

    // renderizar la plantilla ...
}

En el código anterior es importante fijarse en dos cosas. Primero, es mejor utilizar una única acción tanto para mostrar el formulario como para procesarlo. Aunque podrías haber definido una acción newAction que solamente muestre el formulario y después otra acción createAction que sólo se encargue de procesarlo, las dos acciones serían prácticamente idénticas. Así que es mucho más fácil si la acción newAction se encarga de las dos tareas.

En segundo lugar, te aconsejamos que añadas el método $form->isSubmitted() dentro de la instrucción if para hacer el código más claro. Técnicamente no es necesario hacerlo, ya que el método isValid() ejecuta primero el método isSubmitted(). Pero si no lo añades, el flujo de ejecución del formulario queda un poco raro, ya que parece que siempre se está procesando el formulario, incluso en las peticiones GET que simplemente lo muestran.