【发布时间】:2011-09-18 04:08:07
【问题描述】:
我需要将PHPExcel 与Symfony2 项目一起使用。任何人都知道如何正确设置项目以使用该库?我应该把它放在供应商目录中吗?配置文件等应该改变什么?
【问题讨论】:
标签: symfony configuration phpexcel
我需要将PHPExcel 与Symfony2 项目一起使用。任何人都知道如何正确设置项目以使用该库?我应该把它放在供应商目录中吗?配置文件等应该改变什么?
【问题讨论】:
标签: symfony configuration phpexcel
实际上,要正确执行此操作,您需要执行以下步骤:
deps 文件并添加来自PHPExcel 的依赖项
[PHPExcel] git=http://github.com/PHPOffice/PHPExcel.git target=/phpexcel version=origin/master
运行php bin/vendors install 以安装所有缺少的依赖项(在我们的例子中为PHPExcel)
更新app/autoload.php中的前缀部分:
$loader->registerPrefixes(array( // ... 'PHPExcel' => __DIR__.'/../vendor/phpexcel/Classes', ));
Tests/01simple-download-xls.php 的PHPExcel 示例):<?php
namespace Demo\MyBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Response;
use PHPExcel;
use PHPExcel_IOFactory;
class DemoController extends Controller
{
public function demoAction()
{
$response = new Response();
// Create new PHPExcel object
$objPHPExcel = new PHPExcel();
// Set document properties
$objPHPExcel->getProperties()->setCreator("Me")
->setLastModifiedBy("Someone")
->setTitle("My first demo")
->setSubject("Demo Document");
// Add some data
$objPHPExcel->setActiveSheetIndex(0)
->setCellValue('A1', 'Hello')
->setCellValue('B2', 'world!')
->setCellValue('C1', 'Hello')
->setCellValue('D2', 'world!');
// Set active sheet index to the first sheet
$objPHPExcel->setActiveSheetIndex(0);
// Redirect output to a client’s web browser (Excel5)
$response->headers->set('Content-Type', 'application/vnd.ms-excel');
$response->headers->set('Content-Disposition', 'attachment;filename="demo.xls"');
$response->headers->set('Cache-Control', 'max-age=0');
$response->prepare();
$response->sendHeaders();
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
$objWriter->save('php://output');
exit();
}
}
【讨论】:
$response = new Response();并包含use Symfony\Component\HttpFoundation\Response;
$this->get('my.phpexcel_service') 来访问该服务。然后您也可以将此服务注入其他服务......等等......而且一切都很容易测试/模拟。希望它至少有所帮助。
在引导文件中配置自动加载器:
$loader->registerPrefixes(array(
// Swift, Twig etc.
'PHPExcel' => __DIR__ . '/../vendor/phpexcel/lib/PHPExcel'
));
就是这样。
【讨论】:
\PHPExcel。
实际上最好的解决方案是使用https://github.com/liuggio/ExcelBundle。 我尝试使用@Crozin 的解决方案,但我仍然收到有关 IOFactory::createWriter 的错误。 希望这可以帮助, 西蒙娜
【讨论】:
从 Symfony 2.3 开始,您现在可以这样做:
...
"require": {
...
"phpoffice/phpexcel": "dev-master"
...
},
...
然后只需运行composer update,依赖项就会自动解析。
如果您不想弄乱composer.json 文件,也可以使用composer require phpoffice/phpexcel:dev-master。
【讨论】:
如果您使用 composer 来管理您的项目,您只需更改 composer.json 文件:
"autoload": {
"psr-4": {
"": "src/",
"": "vendor/phpoffice/phpexcel/Classes/"
},
"classmap": [
"app/AppKernel.php",
"app/AppCache.php"
]
},
然后添加
use PHPExcel;
use PHPExcel_IOFactory;
到你的控制器文件,你可以像这样使用 PHPExcel:
$objPHPExcel = new PHPExcel();
希望对你有帮助。
【讨论】:
使用 composer(自 Symfony2.1 起)非常简单,您只需修改 composer.json。
您不再需要注册命名空间!
只有两点需要注意:
package类型的解决方案vendor 目录中的整个目录【讨论】: