从上下文 - TYPO3调用私有PHPExcel_IOFactory :: __ construct()

时间:2017-03-03 09:12:23

标签: typo3 phpexcel extbase

您必须使用phpexcel库创建excel导出。所以我复制了我班级的库,然后在我的控制器中编写以下代码

<?php

$strip_list = array('TagToremove');
foreach ($strip_list as $tag)
{
    $temp = preg_replace('/<\/?' . $tag . '(.|\s)*?>/', '', $temp);
}


?>

但它返回错误

  

致命错误:从中调用私有PHPExcel_IOFactory :: __ construct()   上下文&#39; TYPO3 \ CMS \ Core \ Utility \ GeneralUtility&#39;在   /opt/lampp_repository/lampp-5.6/htdocs/typo3_src-7.6.6/typo3/sysext/core/Classes/Utility/GeneralUtility.php   在第4533行

1 个答案:

答案 0 :(得分:1)

不要自己包含库,TYPO3有依赖注入。扩展目录中的所有php文件都将被编入索引,并且所有内部的Classes将自动可用,您只需要确保您的类缓存是新鲜的,如果有疑问则手动删除typo3temp/Cache/Code/ClassLoader*文件。

如果要将外部类包含在自己的命名空间中,则必须使用ext_autoload.php文件提示Extbase如何包含它,因为如果多个扩展将代码加载到同一个类命名空间中,它们将碰撞。

最好不要注入类本身,而是扩展它的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中注入类@ inject-Annotation:

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

进一步阅读: