Más con Symfony

6.3. Configuración básica del formulario

Los requerimientos de la aplicación obligan a modificar dos modelos diferentes (Product y ProductPhoto), por lo que la solución debe hacer uso de dos formularios de Symfony (ProductForm y ProductPhotoForm). Afortunadamente, el framework de formularios puede combinar fácilmente varios formularios en uno solo mediante el método sfForm::embedForm(). En primer lugar, configura ProductPhotoForm de forma independiente. En este ejemplo, se va a utilizar el campo filename como campo para subir archivos:

// lib/form/doctrine/ProductPhotoForm.class.php
public function configure()
{
  $this->useFields(array('filename', 'caption'));

  $this->setWidget('filename', new sfWidgetFormInputFile());
  $this->setValidator('filename', new sfValidatorFile(array(
    'mime_types' => 'web_images',
    'path' => sfConfig::get('sf_upload_dir').'/products',
  )));
}

Este formulario requiere, automáticamente pero por diferentes razones, tanto un campo llamado caption como un campo llamado filename. El campo caption es obligatorio porque su columna relacionada en el esquema de datos ha definido la propiedad notnull con un valor true. El campo filename es obligatorio porque un objeto validador establece por defecto el valor true en la opción required.

Nota sfForm::useFields() es una nueva función de Symfony 1.3 que permite especificar exactamente qué campos del formulario se utilizan y en qué orden deben visualizarse. Todos los demás campos que no sean vacíos se eliminan del formulario.

Hasta ahora no hemos hecho más que la configuración habitual de los formularios. A continuación se combinan varios formularios en uno solo.