1

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);
                },
            )
        );
   }

出力は次のとおりです:ブラウザ出力

同じような問題に直面し、解決策を見つけた人がここにいますか?

前もって感謝します。

4

0 に答える 0