Как правильно использовать PHPExcel с Symfony 2 - PullRequest
15 голосов
/ 19 июня 2011

Мне нужно использовать PHPExcel с проектом Symfony2.Кто-нибудь знает, как правильно настроить проект для использования библиотеки?Должен ли я положить его в каталог продавца?Что следует изменить в файлах конфигурации и т. Д.

Ответы [ 6 ]

14 голосов
/ 04 ноября 2012

На самом деле, чтобы сделать это правильно, вам нужно выполнить следующие шаги:

  • Отредактируйте файл 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();
   }
}
11 голосов
/ 19 июня 2011
  1. Скопируйте библиотеку в каталог вашего поставщика.
  2. Настройте автозагрузчик в файле начальной загрузки:

    $loader->registerPrefixes(array(
        // Swift, Twig etc.
        'PHPExcel' => __DIR__ . '/../vendor/phpexcel/lib/PHPExcel'
    ));
    
  3. Вот и все.

10 голосов
/ 18 апреля 2012

на самом деле лучшее решение - это использовать https://github.com/liuggio/ExcelBundle. Я пытался использовать решение @ Crozin, но все еще получал ошибку об IOFactory :: createWriter.Надеюсь, это поможет, Симона

7 голосов
/ 04 июня 2014

Начиная с Symfony 2.3, теперь вы можете сделать это:

...
"require": {
    ...
    "phpoffice/phpexcel": "dev-master"
    ...
},
...

Затем просто запустите composer update, и зависимости автоматически разрешатся.

Или вы можете сделать composer require phpoffice/phpexcel:dev-master, если выне хочу связываться с файлом composer.json.

5 голосов
/ 01 июня 2017

Если вы используете 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();

Надеюсь, это поможет.

2 голосов
/ 25 апреля 2013

С composer (начиная с Symfony2.1) это действительно легко, вам нужно всего лишь изменить composer.json.
Вам больше не нужно регистрировать пространство имен!

Обратите внимание только на две вещи:

  1. см. Теги github, я нашел решение только с типом package
  2. при изменении чего-либо в файле composer.json, связанном с автозагрузкой класса, необходимо удалить весь каталог в vendor dir

Вот ссылка по ссылке: использовать PHPExcel с composer и Symfony2.2

...