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 deProductPhotoForm
size
: el número deProductPhotoForm
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);
}