Más con Symfony

6.8. Guardando formularios de objetos

Normalmente los formularios están relacionados directamente con una o más tablas de la base de datos y modifican la información en función de los datos enviados en el formulario. Symfony genera automáticamente un objeto de formulario por cada modelo del esquema de datos, que hereda de sfFormDoctrine o de sfFormPropel dependiendo del ORM utilizado. Las clases de formulario son similares entre si y permiten guardar fácilmente en la base de datos lo valores enviados por el usuario.

Nota sfFormObject es una nueva clase añadida en Symfony 1.3 para gestionar todas las tareas comunes de sfFormDoctrine y sfFormPropel. Cada clase hereda de sfFormObject, que ahora se encarga de parte del proceso de guardado del formulario que se acaba de describir.

6.8.1. El proceso de guardado de los formularios

En el ejemplo anterior, Symfony guarda tanto la información de Product como la de los nuevos objetos ProductPhoto sin ningún esfuerzo por parte del programador. El método que hace posible esta magia, sfFormObject::save(), ejecuta internamente una serie de métodos. Entender este proceso es vital para poder modificarlo en escenarios más avanzados.

El proceso de guardado de un formulario consiste en una serie de métodos ejecutados internamente tras invocar el método sfFormObject::save(). La mayor parte del trabajo se ejecuta en el método sfFormObject::updateObject(), que se invoca recursivamente para todos los formularios embebidos.

Proceso de guardado del formulario

Figura 6.2 Proceso de guardado del formulario

Nota La mayor parte del proceso de guardado tiene lugar en el método sfFormObject::doSave(), que se invoca desde sfFormObject::save() y se ejecuta dentro de una transacción de bases de datos. Si quieres modificar el propio proceso de guardado, sfFormObject::doSave() es normalmente el mejor sitio para hacerlo.