将PHPExcel与Zend Framework 2集成

时间:2013-03-25 09:58:39

标签: php zend-framework2

我尝试将两个库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__));



}
}

` 但是classe没有加载

我收到以下错误

( ! ) 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?

6 个答案:

答案 0 :(得分:7)

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

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

php composer.phar selfupdate

php composer.phar require phpoffice/phpexcel

在控制器方法中访问:

$excelObj = new \PHPExcel();

它对我有用。

答案 1 :(得分: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();

答案 2 :(得分: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 

也许这应该是我认为<{1}}库的位置

答案 3 :(得分: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/',
);

答案 4 :(得分:0)

这就解决了我在ZF2中遇到的问题。

将此添加到

  

/供应商/作曲/ autoload_namespaces:

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

在控制器实例化类:

$objPHPExcel = new \PHPExcel();

答案 5 :(得分:0)

问题与自动加载PHPExcel类有关。 vendor/autoload.php文件是自动生成的文件。其含义是&#34;不要编辑此文件并期望您的更改坚持&#34;。 或者,为了避免自动加载PHPExcel类出现问题,可以使用zf2模块PHPOffice/PHPExcelMvlabsPHPExcel库轻松集成到zend框架2中。

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

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

然后你就可以在控制器里面使用了。

$phpExcelObject = $this->serviceLocator->get('mvlabs.phpexcel.service')->createPHPExcelObject();