ExportController.php (1738B)
1 <?php 2 3 namespace PartKeepr\ExportBundle\Controller; 4 5 use Exporter\Writer\CsvWriter; 6 use Exporter\Writer\XmlExcelWriter; 7 use FOS\RestBundle\Controller\Annotations\View; 8 use FOS\RestBundle\Controller\FOSRestController; 9 use Sensio\Bundle\FrameworkExtraBundle\Configuration as Routing; 10 use Symfony\Component\HttpFoundation\Request; 11 use Symfony\Component\HttpFoundation\Response; 12 13 class ExportController extends FOSRestController 14 { 15 /** 16 * Exports the given data to a given format. 17 * 18 * @Routing\Route("/api/export", defaults={"method" = "post","_format" = "json"}) 19 * @View() 20 * 21 * @return array 22 */ 23 public function exportAction(Request $request) 24 { 25 $contentTypes = $request->getAcceptableContentTypes(); 26 27 $exporter = false; 28 $file = tempnam(sys_get_temp_dir(), 'partkeepr_export'); 29 unlink($file); 30 31 foreach ($contentTypes as $contentType) { 32 switch ($contentType) { 33 case 'text/comma-separated-values': 34 $exporter = new CsvWriter($file, ',', '"', '\\', false); 35 break; 36 case 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet': 37 $exporter = new XmlExcelWriter($file, false); 38 break; 39 } 40 } 41 42 if ($exporter === false) { 43 throw new \Exception('No or invalid format specified'); 44 } 45 46 $content = json_decode($request->getContent(), true); 47 48 $exporter->open(); 49 foreach ($content as $item) { 50 $exporter->write($item); 51 } 52 53 $exporter->close(); 54 55 $exportData = file_get_contents($file); 56 57 return new Response($exportData, 200); 58 } 59 }