sfWidgetFormInputFileEditable

130 views
Skip to first unread message

Livio López

unread,
Feb 8, 2011, 10:26:53 AM2/8/11
to symfony-es
Saludos tengo un problema con el sfWidgetFormInputFileEditable...
necesito subir archivos de openoffice .odt, ods, odp pero
particularmente con los archivos odp y ods le cambia la extension
a .bin

tengo este codigo

$this->widgetSchema['ruta'] = new
sfWidgetFormInputFileEditable(array(
'file_src' => sfConfig::get('sf_upload_dir') . '/
correspondenciaadjuntos/' . $this->getObject()->getId(),
'is_image' => false,
'edit_mode' => !$this->isNew(),
'with_delete' => false,
));


$mime_types = array
(
'application/excel',
'application/vnd.ms-excel',
'application/msword',
'application/vnd.ms-powerpoint',
'application/x-msexcel',
'application/x-msword',
'application/vnd.oasis.opendocument.text',
'application/vnd.oasis.opendocument.formula',
'application/vnd.oasis.opendocument.spreadsheet',
'application/octet-stream',
'application/pdf',
'application/x-pdf',
'application/x-gtar',
'application/x-gzip',
'application/x-tar',
'application/zip',
'audio/mpeg',
'image/bmp',
'image/jpeg',
'image/gif',
'image/pjpeg',
'image/x-png',
'text/comma-separated-values',
'video/mpeg',
'video/x-msvideo',
);

$this->validatorSchema['ruta'] = new
sfValidatorFile(array('required' => true,
'mime_types' => $mime_types,
'path' => sfConfig::get('sf_upload_dir') . '/
correspondenciaadjuntos',));



pareciera que no reconoce el 'application/
vnd.oasis.opendocument.formula' sino que lo pasa por un 'application/
octet-stream'

por favor cualquier ayuda lo agradezco

smoreno

unread,
Feb 10, 2011, 8:29:13 AM2/10/11
to symfony-es
Bueno yo tengo el mismo problema pero subiendo archivos .csv si le
pongo en el sfvalidator como mime types (text/csv) me da error porque
me reconoce el fichero como texto plano, y si no le pongo condición
alguna me sube el fichero pero me le cambia la extensión a .txt

barbelith

unread,
Feb 11, 2011, 12:42:19 PM2/11/11
to symfony-es
Para que te funcione, una vez creados los widgets y validadores
normalmente, tienes que sobrescribir función updateObject

Una opción es sobrescribiendo la función updateObject del formulario y
otra es creando una clase que extienda de sfValidatedFile y
sobrescribiendo la función generateFilename, y asignando esa clase al
validador en las opciones

Sería algo similar a esto:

public function updateObject($values = null)
{
$object = parent::updateObject();

$this->updateRuta();

return $object;
}

protected function updateArchivoCssEspecifico()
{
// tenemos que sobrescribir el campo y añadir el archivo ya que
los archivos los guarda con extension txt
$path = sfConfig::get('sf_upload_dir');
$file = $this->getValue('ruta');

if(!empty($file))
{
// borramos el archivo creado por el validador
if (file_exists($path.'/'.$this->getObject()->getRuta()))
{
@unlink($path.'//'.$this->getObject()->getRuta());
}

if ('.csv' !== $file->getOriginalExtension())
{
throw new LogicException('Solo se permiten extensiones csv');
}

// guardamos el archivo y actualizamos el objeto
$filename = sha1($file->getOriginalName()).$file-
>getOriginalExtension();
$file->save($path.'/'.$filename);

$this->object->setRuta($filename);
$this->object->save();
Reply all
Reply to author
Forward
0 new messages