首页 文章

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

提问于
浏览
1

您必须使用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');

    }

但它返回一个错误

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

1 回答

  • 1

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

    如果要将en外部类包含在自己的命名空间中,则必须使用 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;
    

    进一步阅读:

相关问题