válido para Symfony 1.3 y 1.4
Aunque el formulario anterior funciona como se esperaba, es mejor refactorizar un poco su código para facilitar la creación de pruebas unitarias y para que el código sea fácilmente reutilizable.
En primer lugar se aprovecha el código anterior para crear un nuevo formulario
que represente a una colección de ProductPhotoForm:
// lib/form/doctrine/ProductPhotoCollectionForm.class.php class ProductPhotoCollectionForm extends sfForm { public function configure() { if (!$product = $this->getOption('product')) { throw new InvalidArgumentException('You must provide a product object.'); } for ($i = 0; $i < $this->getOption('size', 2); $i++) { $productPhoto = new ProductPhoto(); $productPhoto->Product = $product; $form = new ProductPhotoForm($productPhoto); $this->embedForm($i, $form); } } }
Este formulario require dos opciones:
product: el producto para el que se crea una colección de ProductPhotoForm
size: el número de ProductPhotoForm que se crean (por defecto so dos)
Ahora se puede modificar el método configure() de ProductForm de la siguiente
forma:
// lib/form/doctrine/ProductForm.class.php public function configure() { $form = new ProductPhotoCollectionForm(null, array( 'product' => $this->getObject(), 'size' => 2, )); $this->embedForm('newPhotos', $form); }
válido para Symfony 1.3 y 1.4