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.