válido para Symfony 1.3 y 1.4
Haciendo uso de sfForm::embedForm(), es posible combinar fácilmente los
formularios independientes ProductForm y ProductPhotoForms. Esta combinación
siempre se realiza en el formulario principal, que en este caso es ProductForm.
Los requerimientos de la aplicación exigen que se puedan subir hasta dos fotos
de producto a la vez. Para conseguirlo, se embeben dos objetos ProductPhotoForm
dentro de ProductForm:
// lib/form/doctrine/ProductForm.class.php public function configure() { $subForm = new sfForm(); for ($i = 0; $i < 2; $i++) { $productPhoto = new ProductPhoto(); $productPhoto->Product = $this->getObject(); $form = new ProductPhotoForm($productPhoto); $subForm->embedForm($i, $form); } $this->embedForm('newPhotos', $subForm); }
Si accedes con tu navegador al módulo product, verás que ya es posible subir
dos objetos ProductPhoto, así como modificar el propio objeto Product.
Symfony guarda automáticamente los nuevos objetos ProductPhoto y los relaciona
con su correspondiente objeto Product. Incluso la subida de los archivos,
definida en ProductPhotoForm, funciona correctamente.
Ejecuta las siguientes tareas para comprobar que los registros se han guardado correctamente en la base de datos:
$ php symfony doctrine:dql --table "FROM Product" $ php symfony doctrine:dql --table "FROM ProductPhoto"
En la tabla ProductPhoto puedes ver los nombres de archivo de las fotos. Todo
funciona correctamente siempre que en el directorio web/uploads/products/
existan archivos con el mismo nombre que el guardado en la base de datos.
Como los campos filename y caption son obligatorios en ProductPhotoForm,
la validación del formulario principal siempre falla a menos que el usuario
suba dos nuevas fotos. Sigue leyendo para aprender cómo solucionar este problema.
válido para Symfony 1.3 y 1.4