Upload файлов в симфони
Есть два способа загрузки файлов, первый через форму, а второй такой:
$files = $request->getFiles('file');
$path = $_SERVER['DOCUMENT_ROOT'].'/uploads/file/';
$result_array = array();
$validateFile = new sfValidatorFile(
array(
'required' => true,
'path' => $path,
'mime_types' => 'web_images',
'mime_type_guessers' => array()
),
array('required' => 'Ошибка при загрузке файла',
'mime_types' => 'Неправильный формат файла! Вы можете загружать только изображения.'
)
);
try
{
$validateFile->clean($files); //валидация
try
{
$file_ext = end(explode('.', $files['name']));
$file_name = md5($files['name'].time()).'.'.$file_ext;
$file = new sfValidatedFile($file_name,$files['type'],$files['tmp_name'],$files['size'],$path);
$file->save();
}
catch (Exception $e)
{
$result_array['error'] = "Не удалось сохранить файл";
}
}
catch (Exception $e)
{
$result_array['error'] = "Ошибка при загрузке файла! " . $e;
}
if(isset($result_array['error'])){
$this->getUser()->setFlash('message', $result_array['error']);
}
В sfValidatedFile нет нормального метода, чтобы получить имя файла. Если мы хотим потом получить название файла, то делаем так:
$file_name = str_replace($file->getPath() .'/', '', $file->getSavedName());
Главное еще не забыть про enctype="multipart/form-data"