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.
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.