Zend Framework 2.4.11 および phpoffice/phpexcel 1.8.1 で動作する Excel ブックを取得しようとしています。私のコントローラーコードは次のようなものです:
public function exportAction()
{
$phpExcel = new \PHPExcel();
$phpExcel->setActiveSheetIndex(0);
$phpExcel->getProperties()->setCreator("Me")
->setLastModifiedBy("Someone")
->setTitle("Report")
->setSubject("Demo Report");
$activeSheet = $phpExcel->getActiveSheet();
$results = array('BlahA1', 'BlahA2', 'BlahA3');
$index = 1;
foreach ($results as $result){
$activeSheet->SetCellValue('A'.$index++, $result);
}
$objWriter = \PHPExcel_IOFactory::createWriter($phpExcel, 'Excel2007');
ob_flush();
ob_start();
$headers = array(
'Last-Modified' => gmdate("D, d M Y H:i:s") . ' GMT',
'Cache-Control' => 'no-cache, no-store, must-revalidate',
'Pragma' => 'public',
'Content-Type' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
'Content-Disposition' => 'attachment;filename="Report.xlsx"',
'Content-Transfer-Encoding' => 'binary'
);
$response = $this->getResponse();
$response->getHeaders()->addHeaders($headers);
$objWriter->save('php://output');
$excelOutput = ob_get_clean();
$response->setContent($excelOutput);
return $response;
}
正常に動作し、Excel ブックを開くことはできますが、サービス ロケーターを使用してデータベースからデータを取得しようとすると、次のように機能しません。
class PagamentsController extends AbstractActionController
{
protected $pagamentTable;
public function exportAction(){
...
$results = $this->GetPagamentTable()->fetchAllRegs();
...
}
private function GetPagamentTable()
{
if (!$this->pagamentTable) {
$sm = $this->getServiceLocator();
$this->pagamentTable = $sm->get('Gestio\Model\PagamentTable');
}
return $this->pagamentTable;
}
私のモデルのコードは次のとおりです。
class PagamentTable
{
protected $tableGateway;
public function __construct(TableGateway $tableGateway)
{
$this->tableGateway = $tableGateway;
}
public function fetchAllRegs()
{
return array('BlahA1', 'BlahA2', 'BlahA3');
}
}
そして、私の Module.php は次のとおりです。
public function getServiceConfig()
{
return array(
'factories' => array(
'Gestio\Model\PagamentTable' => function ($sm) {
$tableGateway = $sm->get('PagamentTableGateway');
$table = new PagamentTable($tableGateway);
return $table;
},
'PagamentTableGateway' => function ($sm) {
$dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
$resultSetPrototype = new ResultSet();
$resultSetPrototype->setArrayObjectPrototype(new Pagament());
return new TableGateway('pagaments', $dbAdapter, null, $resultSetPrototype);
},
)
);
}
出力は次のとおりです:ブラウザ出力
同じような問題に直面し、解決策を見つけた人がここにいますか?
前もって感謝します。