PHPExcel в контроллере Zend2

Я пытаюсь заставить PHPExcel работать с Zend2. На самом деле он работает, но не так, как я предполагал (я могу писать в файл, но не могу позволить скачать без сохранения). Я нашел несколько примеров, где вы просто делаете что-то вроде этого:

$objPHPExcel = .... header('Content-Type: application/vnd.ms-excel'); header('Content-Disposition: attachment;filename="01simple.xls"'); header('Cache-Control: max-age=0'); $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5'); $objWriter->save('php://output'); 

И файл был разрешен для загрузки. Как я могу добиться чего-то подобного в Zend2 Controller? Я пробовал до сих пор:

 public function generateRaportAction() { $objPHPExcel = new PHPExcel(); $objPHPExcel->getActiveSheet()->setCellValue( 'B8', 'Some value' ); $objWriter = \PHPExcel_IOFactory::createWriter( $objPHPExcel, 'Excel5' ); $response = $this->getEvent()->getResponse(); $response->getHeaders()->clearHeaders()->addHeaders( array( 'Pragma' => 'public', 'Content-Type' => 'application/vnd.ms-excel', 'Content-Disposition' => 'attachment; filename="test.xls"', 'Cache-Control' => 'must-revalidate, post-check=0, pre-check=0', 'Content-Transfer-Encoding' => 'binary', ) ); $objWriter->save( 'php://output' ); return $response; } 

Но это дает мне выход «echo like» на моей странице. Моя вторая попытка:

 $response->setContent($objWriter->save( 'php://output' )); 

Но результат был тот же.

Как заметил @Aydin Hassan, я пробовал:

 $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007'); ob_start(); $objWriter->save('php://output'); $excelOutput = ob_get_clean(); 

А потом просто передал $excelOutput на контент ответа, и он работает просто отлично!

 $response->setContent($excelOutput); 

Таким образом, вы можете архивировать в своем контроллере что-то вроде этого:

  public function testPHPExcelAction() { // I recommend constructor injection for all needed dependencies ;-) $this->phpExcelService = $this->serviceLocator->get('mvlabs.phpexcel.service'); $objPHPExcel = $this->phpExcelService->createPHPExcelObject(); $objPHPExcel->getProperties()->setCreator("Diego Drigani") ->setLastModifiedBy("Diego Drigani") ->setTitle("MvlabsPHPExcel Test Document") ->setSubject("MvlabsPHPExcel Test Document") ->setDescription("Test document for MvlabsPHPExcel, generated using Zend Framework 2 and PHPExcel.") ->setKeywords("office PHPExcel php zf2 mvlabs") ->setCategory("Test result file"); $objPHPExcel->setActiveSheetIndex(0) ->setCellValue('A1', 'Hello') ->setCellValue('B2', 'world!') ->setCellValue('C1', 'Hello') ->setCellValue('D2', 'world!'); $objPHPExcel->setActiveSheetIndex(0) ->setCellValue('A4', 'Miscellaneous glyphs') ->setCellValue('A5', 'éàèùâêîôûëïüÿäöüç'); $objPHPExcel->getActiveSheet()->setCellValue('A8',"Hello\nWorld"); $objPHPExcel->getActiveSheet()->getRowDimension(8)->setRowHeight(-1); $objPHPExcel->getActiveSheet()->getStyle('A8')->getAlignment()->setWrapText(true); $objPHPExcel->getActiveSheet()->setTitle('Mvlabs'); $objPHPExcel->setActiveSheetIndex(0); $objWriter = $this->phpExcelService->createWriter($objPHPExcel, 'Excel2007' ); $response = $this->phpExcelService->createHttpResponse($objWriter, 200, [ 'Pragma' => 'public', 'Cache-control' => 'must-revalidate, post-check=0, pre-check=0', 'Cache-control' => 'private', 'Expires' => '0000-00-00', 'Content-Type' => 'application/vnd.ms-excel; charset=utf-8', 'Content-Disposition' => 'attachment; filename=' . 'myTest.xls', ]); return $response; } 

Чтобы сделать это выше, вам нужно использовать модуль MvlabsPHPExcel, который дает вам возможность легко использовать библиотеку PHPOffice / PHPExcel в приложении ZF2.