Refactorizando

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);
}
Puedes sugerir, comentar, criticar e informar de errores en contacto (arroba) librosweb.es

Embebiendo formularios

Diseccionando el objeto sfForm
Los contenidos originales de este sitio están bajo una licencia de Creative Commons. Las traducciones disponen cada una de su propia licencia.