2017-03-03 31 views
1

您必須使用phpexcel庫創建excel導出。所以我複製庫在我的課,然後寫了下面的代碼在我的控制器從上下文調用私人PH​​PExcel_IOFactory :: __構造() - TYPO3

require_once PATH_site . 'typo3conf/ext/extension_name/Classes/Library/PHPExcel/IOFactory.php'; 

public function excelTest() 
    { 
     $objectManager = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\CMS\Extbase\Object\ObjectManager'); 
     $objReader = $objectManager->get('PHPExcel_IOFactory'); 

    } 

但它返回一個錯誤

Fatal error: Call to private PHPExcel_IOFactory::__construct() from context 'TYPO3\CMS\Core\Utility\GeneralUtility' in /opt/lampp_repository/lampp-5.6/htdocs/typo3_src-7.6.6/typo3/sysext/core/Classes/Utility/GeneralUtility.php on line 4533

回答

1

請勿自行包括圖書館,TYPO3具有依賴注入了點。您的擴展目錄中的所有php文件都將被編入索引,並且所有內部Classes將自動可用,您只需確保您的類緩存是全新的,如果有疑問,請手動刪除typo3temp/Cache/Code/ClassLoader*文件。

如果您想將en外部類包含到您自己的命名空間中,您必須提示Extbase如何將它包含在ext_autoload.php文件中,因爲如果多個擴展將代碼加載到相同的類命名空間中,它們將發生衝突。

最好不要注入類本身,而是一個擴展它的Abstrct,所以你可以用一種不會修改供應商文件的獨立方式來定製它。

繼承人我的做法吧:

把PHPExcel的所有文件到yourextension/Classes/Vendor/PHPExcel

創建一個新文件yourextension/Classes/Vendor/PHPExcel.php

<?php 
namespace Vendorname\Extensionname\Classes; 

/* 
* PhpExcel 
*/ 
class PhpExcel implements \TYPO3\CMS\Core\SingletonInterface extends \PHPExcel { 

    // Differences from the original implementation, e.g. a writer that generates 
    // a filename and puts the Excel file into typo3temp 

} 

然後,您應該能夠只注入類@注入,註記在你的ActionController:

/** 
    * PhpExcel 
    * 
    * @var \Vendorname\Extensionname\Classes\PhpExcel 
    * @inject 
    */ 
    protected $phpExcel; 

延伸閱讀:

+0

非常感謝您的回答。我將其更名爲temp文件夾。十問題已解決。 –