PHPExcel是一个比较好用的php读取excel文件的类库,今天遇到了在yii中如何加载PHPExcel类文件的问题,因为Yii的autoload机制是安装类名去找文件,即文件名就是相应的类名,而PHPExcel的类文件命名方式则是:dir_dir_classname.php,即文件名把文件的目录名都记录了,这种命名方式yii肯定识别不了。怎么办?

其实PHPExcel也有自己的autoload方法(PHPExcel_Autoloader::load() ),通过查看源码发现它也是通过spl_autoload_register函数注册的(在PHPExcel_Autoloader::register() 中),而我们知道PHP的autoload机制是,所有用spl_autoload_register函数注册的方法,都会在autoload时被spl_autoload_call函数执行一遍,因此我们只需要让PHPExcel的autoload方法顺利注册上就行了。

如果了解Yii的autoload机制,不清楚的可以看Yii的autoload机制,可以知道,只要设置Yii::$enableIncludePath为false,第三方类库就有了执行自己的autoload方法的机会,然后使用下面两行代码就能加载PHPExcel的类了:

Yii::$enableIncludePath = false;
Yii::import('application.vendors.phpexcel.PHPExcel', 1);

  import时采用了force include的方式,这是因为PHPExcel.php在被require时才会注册autoloader,如果等到new PHPExcel时才注册,其他的类例如PHPExcel_IOFactory如果在这之前使用了,就会出现找不到类的错误。

个人认为我的这种办法是比较方便且优雅的,对比网上的其他办法好很多,下面列举的办法都或多或少有点问题,例如:

1、http://www.cnblogs.com/lingyun_k/archive/2010/11/09/1872891.html,这种办法先将Yii自己的autoloader unregister了,会造成yii自己的类加载不上

2、http://www.cnblogs.com/dahuzizyd/archive/2012/07/06/2579738.html,这种办法还修改了PHPExcel的autoloader,代价很大。

在Yii框架中使用PHPExcel的更多相关文章

  1. Yii框架中使用PHPExcel导出Excel文件

    最近在研究PHP的Yii框架,很喜欢,碰到导出Excel的问题,研究了一下,就有了下面的方法: 1.首先在config\main.php中添加对PHPExcel的引用,我的方式是这样: 1 2 3 4 ...

  2. Yii 框架中安装 memcache 及配置和测试

    安装php_memcache.dll扩展 1.首先将php_memcache.dll文件放入E:\server\php\ext目录下 (php_memcache.dll下载地址:http://wind ...

  3. Yii框架中集成phprpc、hprose

    在项目开发的过程中有时候会涉及到对外提供接口供第三方程序调用或者是不同程序间需要相互通信,那么最通用的做法是用传统的SOAP方式来实现,用XML的文档格式来作为传输载体.但是这种方式不灵活,支持的数据 ...

  4. 使用Yii框架中遇到的三个问题

    以下由我们在信易网络公司开发项目的时候终结出的一些经验 使用Yii框架中遇到的三个问题 1.main.php文件中欲引入全局变量的问题 还原一下此问题:在Yii框架中,main.php一般会作为整个应 ...

  5. yii框架中关于控制器中filter过滤器和外部action的使用

    在yii框架中,控制器的过滤器分为执行前和执行后,这里举例是在执行控制器前的过滤. 需要在components/文件夹下定义公共的TestAction.php文件,并且实现run()方法.这个acti ...

  6. Yii框架中使用SRBAC作为权限管理模块时遇到的问题

    Yii框架中使用SRBAC作为权限管理模块时遇到的问题   看到Yii中提供RBAC的插件,SRBAC,就想用用. 结果按照手册上的安装办法,整来整去,安装完了,可就是进不了权限管理界面. 最后想到, ...

  7. YII框架中可以使用foreach遍历对象以及可以使用数组形式直接访问对象的原因

    YII框架中可以使用foreach遍历对象以及可以使用数组形式直接访问对象的原因在YII框架的使用过程中,我们可以使用foreach直接遍历findAll等方法返回的对象的属性为什么呢?其实这与CMo ...

  8. 在自己的框架中引用 PHPExcel

    如果直接在框架中的controller中直接引用 xxxx/PHPExcel.php,由于框架中有autoload 与PHPExcel的autoload冲突(加载目录原因), 那么在不想做太多修改的情 ...

  9. YII框架中php入口文件隐藏

    Apache配置修改 主要修改下httpd文件中的两个地方 1.启用mod_rewrite.so模块,在Apache的配置文件中找到如下行,去掉前面的字符"#",保存 #LoadM ...

随机推荐

  1. UITextView(文本视图) 学习之初体验

    UITextView文本视图相比与UITextField直观的区别就是UITextView可以输入多行文字并且可以滚动显示浏览全文.常见UITextView使用在APP的软件简介.内容详情显示.小说阅 ...

  2. hdu1443(约瑟夫环游戏的原理 用链表过的)

    Problem Description The Joseph's problem is notoriously known. For those who are not familiar with t ...

  3. 浅谈Linux系统的启动流程

    Linux系统的启动时通过读取不同的配置文件,执行相应的Shell脚本完成的.当然本文只是简单的从文件的角度分析,更深层次的本文没涉及. 主要读取了以下文件:  /boot/grub/grub.con ...

  4. Retrieving the COM class factory for component with CLSID XX failed due to the following error: 80070005 拒绝访问。

    环境及异常信息说明 环境说明: Win2008 R2 企业版 x64 .IIS 7.0 功能说明:服务端操作Excel,(上传Excel到服务器,并在服务器端读取Excel中的数据) 异常信息:Ret ...

  5. java 数字补齐0

    String str_f = str.substring(0, 1); int i = (Integer.parseInt(str.substring(1)) + 1); // 数字补齐0 Decim ...

  6. 配置sphinx

    1.先安装sphinxclient    #cd /usr/local/src    #wget http://sphinxsearch.com/files/sphinx-0.9.9.tar.gz   ...

  7. 用Dockerfile构建docker image

    dockerfile是为快速构建docker image而设计的,当你使用docker build 命令的时候,docker 会读取当前目录下的命名为Dockerfile(首字母大写)的纯文本文件并执 ...

  8. WSGI的理解

    Python web开发中,服务端程序可分为2个部分: 服务器程序(用来接收.整理客户端发送的请求) 应用程序(处理服务器程序传递过来的请求) 在开发应用程序的时候,我们会把常用的功能封装起来,成为各 ...

  9. iOS开发之网络篇-CocoaPods的安装 EI Capitan 10.11 之前的方式

    注意:此种方式,在苹果系统 EI Capitan 10.11  之前的版本,新版本有所不同 一.安装 1> 查看gem源 $ gem sources –l 2> 删除源 (因为本人是第N次 ...

  10. Cognitive Radio Emergency Networks – Requirements and Design

    2005 IEEE 这是一个典型的Ad hoc场景.紧急情况下的临时自组网络.虽然之前的论文中把它标记为out-of-band global coverage,但这个也是分组的,每个组有个gatewa ...