Upload файлов в симфони

Symfony framework

Автор: Александр Степанов

5 февр. 2013 г., 10:00:54  1302


Есть два способа загрузки файлов, первый через форму, а второй такой:

$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"