Symfony 1.2: решение проблемы загрузки flv файлов в админке
В Symfony есть одна неприятная проблемка. Если попытаться залить файлы .flv в админке, то после того как файл запишется на диск, мы получим расширение файла в виде: .exe и .obj, . В предыдущей версии Symfony 1.1 это решалось перекрытием методов в actions.class.php, и исправлениями других файлов. Конечно проблему это решило, но её реализация была так себе. В новой версии решил написать по другому и получилось все очень просто. Почему так происходит? При загрузке .flv файлов они определяться как application/octet-stream, а в Symfony это как раз тип файлов .exe. Поэтому создаем свой myValidatorFile, который наследует sfValidatorFile и решает проблему. Листинг 1: Класс myValidatorFile для замены sfValidatorFile
addOption('validated_file_class', 'myValidatedFile');
}
}
/**
* myValidatedFile represents a validated uploaded file.
*
*
* Fix problem with flv file upload in Admin Generator
*
* @package symfony
* @subpackage validator
* @author Igor Brovchenko webdev [at] tigor [dot] com [dot] ua
*/
class myValidatedFile extends sfValidatedFile
{
/**
* Returns the extension associated with the given content type.
*
* @param string $type The content type
* @param string $default The default extension to use
*
* @return string The extension (with the dot)
*/
protected function getExtensionFromType($type, $default = '')
{
if($type == 'application/octet-stream' && '.flv' == strtolower($default))
{
return '.flv';
}
return parent::getExtensionFromType($type, $default = '');
}
}
Листинг 2: Пример использования myValidatorFile
setWidget('file', new sfWidgetFormInputFileEditable(array(
'is_image' => true
)));
$this->validatorSchema['file'] = new myValidatorFile(array(
'required' => false,
'mime_types' => $mime_types,
'path' => sfConfig::get('sf_upload_dir') . '/video',
));
$this->validatorSchema->setOption('allow_extra_fields', true);
$this->validatorSchema->setOption('filter_extra_fields', false);
}
}
Что сделали:
- • добавили новый mime_type ‘application/octet-stream’
- • указали свой валидатор myValidatorFile