Ver índice de contenidos del libro

12.7. Formularios y Doctrine

El objetivo de un formulario es traducir los datos de un objeto (por ejemplo, Task) a un formulario HTML y luego traducir los datos enviados por el usuario al objeto original. Así que la persistencia del objeto Task en una base de datos es algo completamente ajeno a los formularios. No obstante, si has configurado la clase Task para persistirla a través de Doctrine (es decir, si le has añadido metadatos para mapear las propiedades a la base de datos), entonces puedes persistirla después de comprobar que los datos del formulario son válidos:

if ($form->isValid()) {
    $em = $this->getDoctrine()->getEntityManager();
    $em->persist($task);
    $em->flush();
 
    return $this->redirect($this->generateUrl('task_success'));
}

Si por alguna razón, no tienes acceso a tu objeto $task original, lo puedes recuperar a través el formulario:

$task = $form->getData();

Para más información, consulta el capítulo dedicado a Doctrine.

La clave para entender por qué es tan fácil persistir el objeto reside en el propio funcionamiento de los formularios de Symfony. En cuanto la petición se asocia al formulario, los datos enviados por el usuario se guardan en el objeto, sean válidos o no. Por tanto, una vez comprobada su validez, puedes persistir directamente el objeto porque ya tiene toda su información actualizada.