0

我尝试将 PHPWord 和 PHPExcel 这两个库用作 ZendFramework2 中的两个库,也就是说将它们放在 Zend Framework 2 的 /lib 中并将它们加载到我的控制器中

在我的 autoload.php 我把以下

<?php

// autoload.php generated by Composer

require_once __DIR__ . '/composer' . '/autoload_real.php';

return ComposerAutoloaderInit689ffe38af096b92264c8f237441d64e::getLoader();

require_once 'Zend/Loader/Autoloader.php';
$loader = Zend_Loader_Autoloader::getInstance();
$loader->autoloadernamespaces[] = "Excel_";
$loader->registerNamespace('Excel_');

$loader->setFallbackAutoloader(true);

if ($configSection == 'development')
{
$loader->suppressNotFoundWarnings(false);
}

我的控制器是:

<?php
namespace Auth\Controller;
use Zend\Mvc\Controller\AbstractActionController;
use Zend\Excel\PHPExcel;



class AuthController extends AbstractActionController
{
public function LoginAction()
{
$objPHPExcel = new PHPExcel_Reader_Excel5();
$document = $objPHPExcel->load('example1.xls');

echo date('H:i:s') , " Données Ajoutées Avec Succés" ;
$document->setActiveSheetIndex(0)
        ->setCellValue('A1', 'Mike')
        ->setCellValue('D2', 'Spils);
        // Save Excel5 file



$objWriter = PHPExcel_IOFactory::createWriter($document, 'Excel5');
$objWriter->save(str_replace('.php', '.xls', __FILE__));



}
}

` 但是该类没有被加载

我收到以下错误

( ! ) Fatal error: Class 'Auth\Controller\PHPExcel_Reader_Excel5' not found in         C:\wamp\www\zend\module\Auth\src\Auth\Controller\AuthController.php on line 14

任何人都可以帮我pleeeeaase ?

4

6 回答 6

7

如果您使用 composer 加载 zendframework,请尝试使用 composer.php 加载 phpExcel lib。

从项目文件夹中的命令行运行以下命令:

php composer.phar selfupdate

php composer.phar require phpoffice/phpexcel

控制器方法中的访问为:

$excelObj = new \PHPExcel();

这个对我有用。

于 2015-02-11T11:30:27.330 回答
1

如果您使用“经典”骨架

下载库(在 MyApp/vendor/library/ 中)网站是: http: //phpexcel.codeplex.com/

PHPExcel 的架构是由前缀组成的(比如 zf1),所以对我来说,像这样使用“Zend\Loader\ClassMapAutoloader”更容易:修改模块的文件 autoload_classmap

<?php
return array('PHPExcel'=>__DIR__.'/../../vendor/library/PhpExcel/PHPExcel.php',);

所以你可以使用:

$excel = new \PHPExcel();
于 2013-09-13T07:28:21.057 回答
0

我还没有任何使用ZF2的经验。但我很确定你注册了一个错误的命名空间,它应该是:

$loader->autoloadernamespaces[] = "PHPExcel_";
$loader->registerNamespace('PHPExcel_');

编辑

Zend/Excel/PHPExcel在这个位置有你的 PHPExcel 库吗?

好吧,我不确定,但它不应该放在 Zend 的核心库中。

use PHPExcel\Reader\Excel5;

也许它应该与 Zend 的库平行放置。

- Zend/    
- PHPExcel/

编辑 2

如果 Zendframework 2 文件夹结构是这样的:

- vendor/
    - zendframework/zendframework/library/Zend
    - PHPExcel/
    - autoload.php 

也许这应该是PHPExcel我认为你的图书馆的位置

于 2013-03-25T12:08:00.467 回答
0

正如@ro-ko 所建议的那样,您应该将文件夹放在供应商中,所以

vendor/PHPExcel

然后打开 vendor/composer/autoload_namespaces.php

你会看到这样的东西

<?php

// autoload_namespaces.php generated by Composer

$vendorDir = dirname(__DIR__);
$baseDir = dirname($vendorDir);

return array(
    'Zend\\' => $vendorDir . '/zendframework/zendframework/library/',
    'ZendTest\\' => $vendorDir . '/zendframework/zendframework/tests/',
);

只需添加您的命名空间和该数组的路径,例如...

return array(
    'Zend\\' => $vendorDir . '/zendframework/zendframework/library/',
    'ZendTest\\' => $vendorDir . '/zendframework/zendframework/tests/',
    'PHPExcel\\' => $vendorDir . '/PHPExcel/',
);
于 2013-03-25T13:26:14.527 回答
0

这就是解决我在 ZF2 中的问题的原因。

将此添加到

/vendor/composer/autoload_namespaces:

'PHPExcel' => array($vendorDir . '/zendframework/zendframework/library/Zend/PHPExcel/'),

并在控制器中实例化类:

$objPHPExcel = new \PHPExcel();
于 2015-08-11T13:49:30.757 回答
0

该问题与自动加载 PHPExcel 类有关。该vendor/autoload.php文件是自动生成的文件。这意味着“不要编辑此文件并期望您的更改能够坚持”。或者,为了避免自动加载 PHPExcel 类出现问题,可以使用 zf2 模块MvlabsPHPExcel将PHPOffice/PHPExcel库轻松集成到 zend 框架 2 中。

之后,您需要启用该MvlabsPHPExcel模块:

<?php
return [
    'modules' => [
        // ...
        'MvlabsPHPExcel',            
    ],
    // ...
];

之后,您就可以在控制器内部使用了。

$phpExcelObject = $this->serviceLocator->get('mvlabs.phpexcel.service')->createPHPExcelObject();
于 2017-03-17T16:53:08.940 回答