首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从上下文- TYPO3调用私有的TYPO3()

从上下文- TYPO3调用私有的TYPO3()
EN

Stack Overflow用户
提问于 2017-03-03 09:12:23
回答 1查看 1.5K关注 0票数 1

Hi必须使用phpexcel库创建excel导出。因此,我在类中复制库,然后在控制器中编写以下代码

代码语言:javascript
复制
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()

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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

代码语言:javascript
复制
<?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:

代码语言:javascript
复制
    /**
     * PhpExcel
     *
     * @var \Vendorname\Extensionname\Classes\PhpExcel
     * @inject
     */
    protected $phpExcel;

进一步读:

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42574784

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档