Una situación muy típica a la hora de desarrollar una aplicación web es ofrecer al usuario la posibilidad de subir una imagen y, de manera automática, generar un thumbnail de ésta.

Si estamos intentando implementar esta funcionalidad con symfony nos encontramos con la agradable sorpresa de que ya existe un plugin que nos facilita la tarea, sfThumbnailPlugin, pero sólo se encarga de generar el propio thumbnail, la pregunta que surge es: ¿dónde integrar la lógica para que se genere el thumbnail cada vez que se añade una imagen a un formulario?

La respuesta a la última pregunta me la dió David Vega en su post sfThumbnailPlugin y AdminGenerator: redimensionar imágenes el cual recomiendo que leáis.

Reconozco que la solución de David Vega me dejó con la boca abierta por lo bien que “encuadró” el código dentro del framework (en symfony uno no sabe muchas veces dónde poner el código), aunque en mi opinión no aprovecha bien la herencia de la clase padre, así que esta es mi versión de su sfResizedFile, con su permiso, ;) :

class sfResizedFile extends sfValidatedFile
{
	public function save($file = null, $fileMode = 0666, $create = true, $dirMode = 0777)
	{
		$file = parent::save($file, $fileMode, $create, $dirMode);
 
                $thumbFile = $this->path.DIRECTORY_SEPARATOR.'thumb_'.$file;
		$thumbnail = new sfThumbnail(100, 100, true, true, 85);
		$thumbnail->loadFile($this->getTempName());
		$thumbnail->save($thumbFile, 'image/jpeg');
 
                chmod($thumbFile, $fileMode);
 
                return $file;
	}
 
}