Hi必须使用phpexcel库创建excel导出。因此,我在类中复制库,然后在控制器中编写以下代码
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');
}但它会返回一个错误
致命错误:在第4533行的/opt/lampp_repository/lampp-5.6/htdocs/typo3_src-7.6.6/typo3/sysext/core/Classes/Utility/GeneralUtility.php中从上下文‘TYPO3 3\CMS\Core\实用程序\通用实用程序’调用私有PHPExcel_IOFactory::__construct()
发布于 2017-03-07 12:33:56
不要自己包含库,TYPO3有依赖注入。扩展目录中的所有php文件都将被编入索引,并且所有类都将自动可用,您只需确保类缓存是新鲜的,如果手动删除typo3temp/Cache/Code/ClassLoader*文件有疑问的话。
如果要将en外部类包含到您自己的命名空间中,则必须提示Extbase如何将其包含在ext_autoload.php文件中,因为如果多个扩展将代码加载到同一个类命名空间中,它们将发生冲突。
它也是一个很好的实践,不是注入类本身,而是一个扩展到类上的抽象,因此您可以以一种不修改供应商文件的隔离方式定制它。
以下是我的做法:
将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中插入类@ inject:
/**
* PhpExcel
*
* @var \Vendorname\Extensionname\Classes\PhpExcel
* @inject
*/
protected $phpExcel;进一步读:
https://stackoverflow.com/questions/42574784
复制相似问题