Failed to open stream: include (PHPExcel_Shared_ZipStreamWrapper.php) en Yii-Framework y PHPExcel

Tenemos varias aplicaciones que comparten extenciones para esto se creó un directorio compartido en el servidor.
Una de estas extenciones es la de PHPExcel la cual arroja un error al ser incluida a la aplicación.
En mi actiongenerarReporte puse lo siguiente:

 
/* alias al path */ 
Yii::setPathOfAlias('compartido','/home/apache/web/aplicacion/compartido'); 
/* importar la extención */ 
Yii::import('compartido.extensions.classes.PHPExcel.PHPExcel'); 

Eso arroja el siguiente mensaje:

include(PHPExcel_Shared_ZipStreamWrapper.php) [<a href='function.include'>function.include</a>]: failed to open stream: No such file or directory


Al parecer el autoload de PHPExcel no estaba cargando correctamente todos los archivos.
En la wiki de yiiframework encontré como resolverlo:
 
Yii::setPathOfAlias('compartido','/basecentral/apache/web/aplicacion/compartido'); 
Yii::import('compartido.extensions.classes.PHPExcel.PHPExcel'); 
spl_autoload_unregister(array('YiiBase', 'autoload')); 
$phpExcelPath = Yii::getPathOfAlias('compartido.extensions.classes.PHPExcel'); 
include($phpExcelPath . DIRECTORY_SEPARATOR . 'PHPExcel.php'); 
spl_autoload_register(array('YiiBase', 'autoload')); 

Esto no lo queria hacer en cada acción de mi controlador asi que lo pusé en el metodo "beforeAction" quedando de la siguiente manera:
protected function beforeAction ($action){
Yii::setPathOfAlias('compartido','/basecentral/apache/web/aplicacion/compartido'); 
Yii::import('compartido.extensions.classes.PHPExcel.PHPExcel'); 
spl_autoload_unregister(array('YiiBase', 'autoload')); 
$phpExcelPath = Yii::getPathOfAlias('compartido.extensions.classes.PHPExcel'); 
include($phpExcelPath . DIRECTORY_SEPARATOR . 'PHPExcel.php'); 
spl_autoload_register(array('YiiBase', 'autoload')); 
return parent::beforeAction($action); 
} 
Y ya puedo usarlo en la acción donde  genero el excel.
 
public function actiongenerarReporte (){ 
$_xls = new PHPExcel(); 
$_xls-&gt;getProperties()-&gt;setDescription($titulo); 
$_xls-&gt;getProperties()-&gt;setTitle($titulo); 
} 

Referencias: http://www.yiiframework.com/wiki/101/how-to-use-phpexcel-external-library-with-yii/

Comentarios

Excelente post Peter.

Imagen de peter

Gracias.

Saludos.

Añadir nuevo comentario