Zend Autoloader中找不到PHPExcel类

yyc*_*man 8 zend-framework namespaces phpexcel

我正在努力使用Zend Framework中的命名空间(至少我认为这是命名空间问题).

我想将PHPExcel集成到我的Zend项目中.相关文件结构如下:

/
 -library
   -ABCD
   -PHPExcel
   -Zend
   -ZendX
   -PHPExcel.php
Run Code Online (Sandbox Code Playgroud)

之后,自定义类工作正常

Zend_Loader_Autoloader::getInstance()->registerNamespace('ABCD_');
Run Code Online (Sandbox Code Playgroud)

在引导程序中.此外,这些课程都被命名为ABCD_blahdeblah.

但是,执行registerNamespace('PHPExcel_')无助于Zend找到合适的类.当我尝试

$sheet = new PHPExcel; 
Run Code Online (Sandbox Code Playgroud)

在控制器中,我收到"未找到类"错误.我猜这是因为PHPExcel中的类没有使用命名空间前缀命名,或者因为主PHPExcel.php文件位于我刚刚声明的命名空间之外.但PHPExcel结构要求它位于其余类/ font/etc文件的父目录中.

任何指针都将非常感激.

提前致谢.

Dav*_*aub 10

为PHPExcel创建自动加载器并将其添加到Zend自动加载器堆栈.

library/My/Loader/Autoloader/PHPExcel.php:

class My_Loader_Autoloader_PHPExcel implements Zend_Loader_Autoloader_Interface
{
    public function autoload($class)
    {
        if ('PHPExcel' != $class){
            return false;
        }
        require_once 'PHPExcel.php';
        return $class;
    }
}
Run Code Online (Sandbox Code Playgroud)

并在application/configs/application.ini:

autoloadernamespaces[] = "My_"
Run Code Online (Sandbox Code Playgroud)

然后,在application/Bootstrap.php:

protected function _initAutoloading()
{
    $autoloader = Zend_Loader_Autoloader::getInstance();
    $autoloader->pushAutoloader(new My_Loader_Autoloader_PHPExcel());
}
Run Code Online (Sandbox Code Playgroud)

然后你应该能够用一个简单的实例化PHPExcel - 比如在控制器中 -

$excel = new PHPExcel();
Run Code Online (Sandbox Code Playgroud)

唯一的粘性部分就是PHPExcel处理在其自己的文件夹中加载所有依赖项的方法.如果这是聪明地完成 - 无论是通过调用require_once basename(__FILE__) . '/someFile.php'还是使用自己的自动加载器,它都不会妨碍Zend自动加载器 - 那么一切都应该很酷.#著名遗言