2011-06-19 98 views

Respuesta

2

Si está utilizando el compositor para gestionar su proyecto, sólo se puede cambiar el archivo composer.json:

"autoload": { 
    "psr-4": { 
     "": "src/", 
     "": "vendor/phpoffice/phpexcel/Classes/" 
    }, 
    "classmap": [ 
     "app/AppKernel.php", 
     "app/AppCache.php" 
    ] 
}, 

A continuación, agregue

use PHPExcel; 
use PHPExcel_IOFactory; 

a su archivo de controlador, y se puede utilizar el PHPExcel como este:

$objPHPExcel = new PHPExcel(); 

Espero que ayude.

+0

Sí, esta es la manera moderna. En 2011 las cosas fueron un poco diferentes :) – YakobeYak

11
  1. Copie la biblioteca en el directorio de sus proveedores.
  2. Configurar cargador automático en su archivo de arranque:

    $loader->registerPrefixes(array(
        // Swift, Twig etc. 
        'PHPExcel' => __DIR__ . '/../vendor/phpexcel/lib/PHPExcel' 
    )); 
    
  3. eso es todo.

+0

¡Trabajos! ¡Muchas gracias! – YakobeYak

+0

Tengo el mismo problema, ¿podría explicar su solución un poco más? Si trato de inicializar la clase PHPExcel en mi controlador, obtengo una "clase no encontrada" ... –

+0

@Tobias Schittkowski: He editado mi respuesta. – Crozin

14

En realidad, para hacerlo bien es necesario seguir los siguientes pasos:

  • editar el archivo deps y añadir la dependencia de la PHPExcel
[PHPExcel] 
git=http://github.com/PHPOffice/PHPExcel.git 
target=/phpexcel 
version=origin/master 
  • Ejecutar php bin/vendors install con el fin de instalar todas las dependencias faltantes (PHPExcel en nuestro caso)

  • actualización prefijos sección en app/autoload.php:

$loader->registerPrefixes(array(
    // ... 
    'PHPExcel'   => __DIR__.'/../vendor/phpexcel/Classes', 
)); 
  • Listo. Ahora, se puede usar en el controlador (código basado en PHPExcel ejemplo de Tests/01simple-download-xls.php) de su paquete:
<?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(); 
    } 
} 
+0

Recibo el error Variable indefinida: respuesta – Sadikhasan

+1

simplemente agregue '$ respuesta = new Respuesta();' al comienzo de la función e incluir 'use Symfony \ Component \ HttpFoundation \ Response;' – gakhov

+0

Nunca utilizaría el operador "nuevo" en el controlador Symfony2 porque, básicamente, usted está diciendo: "Nunca probaré esta controladora en forma individual, ni daré a mis compañeros de trabajo una oportunidad de probar esto. Esto funcionará, pero es una mala, mala práctica – alchemication

2

con el compositor (ya Symfony2.1) que es muy fácil, sólo tiene que modificar el composer.json.
¡Ya no es necesario que registres el espacio de nombres!

Sólo dos cosas, a destacar:

  1. se refieren a las etiquetas de GitHub, sólo he encontrado un Soltion con el package tipo
  2. cuando se cambia algo en el composer.json relacionados con la materia de carga automática de clases, se tiene que quitar el directorio completo en el vendor dir

Aquí está el enlace relacionado: use PHPExcel with composer and Symfony2.2

7

A partir de Symfony 2.3, ahora se puede hacer esto:

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

A continuación, sólo funcionan composer update y dependencias se resolverán automáticamente.

O puede hacer composer require phpoffice/phpexcel:dev-master si no quiere meterse con el archivo composer.json.