Как правильно использовать PHPExcel с Symfony 2
Мне нужно использовать PHPExcel
проект Symfony2
. Кто-нибудь знает, как правильно настроить проект для использования библиотеки? Должен ли я поместить его в каталог поставщика? Что нужно изменить в файлах конфигурации и т.д.
Ответы
Ответ 1
Если вы используете композитор для управления вашим проектом, вы можете просто изменить файл 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();
Надеюсь, что это поможет.
Ответ 2
Собственно, чтобы сделать это правильно, вам нужно выполнить следующие шаги:
- Отредактируйте файл
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',
));
- Готово. Теперь вы можете использовать его в своем контроллере пакетов (код на основе
PHPExcel
пример из Tests/01simple-download-xls.php
):
<?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();
}
}
Ответ 3
- Скопируйте библиотеку в каталог поставщиков.
-
Настройте автозагрузчик в файле начальной загрузки:
$loader->registerPrefixes(array(
// Swift, Twig etc.
'PHPExcel' => __DIR__ . '/../vendor/phpexcel/lib/PHPExcel'
));
-
Что все.
Ответ 4
на самом деле лучшим решением является использование https://github.com/liuggio/ExcelBundle.
Я попытался использовать решение @Crozin, но я все еще получал сообщение об ошибке IOFactory:: createWriter.
Надеюсь это поможет,
Simone
Ответ 5
Как и в Symfony 2.3, вы можете сделать это:
...
"require": {
...
"phpoffice/phpexcel": "dev-master"
...
},
...
Затем просто запустите composer update
, и зависимости будут разрешаться автоматически.
Или вы можете сделать composer require phpoffice/phpexcel:dev-master
, если вы не хотите связываться с файлом composer.json
.
Ответ 6
С композитором (с Symfony2.1) это очень просто, вам нужно только изменить composer.json
.
Вам больше не нужно регистрировать пространство имен!
Только две вещи, чтобы заметить:
- ссылаются на теги github, я нашел только разрешение с типом
package
- При смене чего-то в компоновщике .json, относящемся к классу автозагрузки, вам нужно удалить весь каталог в директории
vendor
dir
Вот ссылка: использовать PHPExcel с композитором и Symfony2.2