从上下文调用 private PHPExcel_IOFactory::__construct() - TYPO3
Call to private PHPExcel_IOFactory::__construct() from context - TYPO3
您好必须使用 phpexcel 库创建一个 excel 导出。所以我在我的 class 中复制库,然后在我的控制器中编写以下代码
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');
}
但是它 return 一个错误
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
不要自己包含库,TYPO3 有依赖注入。您的扩展目录中的所有 php 文件都将被索引,并且其中的所有 类 将自动可用,您只需确保您的 class 缓存是新鲜的,如果有疑问通过手动删除 typo3temp/Cache/Code/ClassLoader*
文件。
如果您想将外部 class 包含到您自己的命名空间中,您必须使用 ext_autoload.php
文件提示 Extbase 如何包含它,因为如果多个扩展将代码加载到它们将冲突的相同 class 名称空间。
最好不要注入 class 本身,而是注入在其上扩展的 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 中注入 class @inject-Annotation:
/**
* PhpExcel
*
* @var \Vendorname\Extensionname\Classes\PhpExcel
* @inject
*/
protected $phpExcel;
进一步阅读:
您好必须使用 phpexcel 库创建一个 excel 导出。所以我在我的 class 中复制库,然后在我的控制器中编写以下代码
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');
}
但是它 return 一个错误
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
不要自己包含库,TYPO3 有依赖注入。您的扩展目录中的所有 php 文件都将被索引,并且其中的所有 类 将自动可用,您只需确保您的 class 缓存是新鲜的,如果有疑问通过手动删除 typo3temp/Cache/Code/ClassLoader*
文件。
如果您想将外部 class 包含到您自己的命名空间中,您必须使用 ext_autoload.php
文件提示 Extbase 如何包含它,因为如果多个扩展将代码加载到它们将冲突的相同 class 名称空间。
最好不要注入 class 本身,而是注入在其上扩展的 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 中注入 class @inject-Annotation:
/**
* PhpExcel
*
* @var \Vendorname\Extensionname\Classes\PhpExcel
* @inject
*/
protected $phpExcel;
进一步阅读: