yunnysunny 发表于 2012-2-6 22:51:04

关于CI1.7.3升级为2.1.0应该注意的那些事

本帖最后由 yunnysunny 于 2012-6-7 12:28 编辑

  直接从1.7.3升级到2.1.0是没有文档参考的,可以参考的只能是从1.7.3升级到2.0.0(地址http://codeigniter.org.cn/user_guide/installation/upgrade_200.html),感觉官方给出的文档不是很全面,讲了很多函数的改动,有必要列出来,但是可能对于大多数用户来说这些都用不到。我们还是捞干的说吧:

[*]首先将 system 文件夹下的除了 application 文件夹外所有文件替换掉。
[*]其实 index.php 也是需要替换掉的,文档上没有提及。
接着就是 application 文件夹下的代码改动了。
CI 2.x 将核心的 Model 和 Controller 类名改掉了(感觉这个改动很鸡肋),对于开发者来说,改动起来比较被动,幸好我们有比较得心应手的工具,ultraedit、dreamweaver 等工具都可以实现批量替换。
以 ultraedit 为例讲一下怎样批量替换。
打开 urltraedit,选择菜单“搜索”->“在文件中搜索”,在打开的对话框中输入“查找什么”:extends\s+(C|c)ontroller,在“替换为”中输入:extends CI_Controller,选择文件类型为 *.php,选择目录为 application 文件夹所在目录(比如说我的目录是E:\xampp\htdocs\qloa\system\),由于我们的搜索条件使用了正则表达式,所以勾选“正则表达式:perl”,并且选择“正则表达式引擎”为 perl,最后点击按钮“全部替换”即可。
总结起来要替换的内容:

[*]extends\s+(C|c)ontroller替换为extends CI_Controller,extends\s+(M|m)odel替换为extends CI_Model。
[*]parent::Controller();替换为parent::__construct();
[*]parent::Model();替换为parent::__construct();
[*]orwhere, orlike, groupby, orhaving, orderby, getwhere 这些函数应经被改名了,函数名的单词和单词之间用下划线分割开,比如 orderby 替换成 order_by。

最后是 application 下的文件变动:[*]如果你的系统中有替换系统核心类库的代码,在1.7.x中是放在 application 下的 libraries 中的,现在在 2.x 中要放在application 下的 core 文件夹中,否则会提示找不到文件。注意是系统核心类库,比如说我们通常自己生成一个继承自CI_Controller的MY_Controller来增强一下控制器的访问控制功能。普通的类库任然要放在libraries目录下。
[*]kndb session类在2.1是不起作用,把kndb session的类文件Session.php拷贝到core文件夹下,但是任然加载的是系统自带的session类库,考虑到系统自带类库bug问题已经解决,最终弃用kndb session。使用系统自带session,如果启用数据库支持,并且配置了检查user_agent之后,如果你没有修改数据库中session记录表中user_agent 字段的长度的话,session是不会记录成功的。CI 1.x中这个字段长度是50,CI2.x中已经修正为120。参见http://codeigniter.org.cn/user_guide/libraries/sessions.html中的【将session写入数据库】小节。chrome浏览器的user agent属性在100个字符作用,如果使用原来的user agent字段长度的话,会导致你的登录等操作失败。
[*]在 application 中新增 cache、logs、core、third_party 文件夹,其中 cache 和 logs 原来位于 system 文件夹中,在 system 文件夹中这两个文件夹可以删除掉。更新 errors 这个文件夹。
[*]plugins 文件夹的文件要移动到 library 中,具体方法看开头提到的文档链接,由于我没有使用 plugins 所以就不多说了。

Hex 发表于 2012-2-7 12:02:41

支持!

-Valen。 发表于 2012-2-7 13:08:24

太好了。正需要啊~{:1_1:}

雨天情 发表于 2012-2-8 12:30:20

支持。。。

素颜衬红妆凄美 发表于 2012-2-17 18:24:37

我想请问
select * form user where name='cc' and (style_id= '10001' or style_id='10006' or style_id='10020');
(style_id= '10001' or style_id='10006' or style_id='10020')   是从另一个表查询 循环出来的

这样的该怎么写呢   灰常感谢{:soso_e183:}

yunnysunny 发表于 2012-2-24 10:44:13

select * form user where name='cc' and style_id in (select style_id from sometable where theCondition);

zhengfeity 发表于 2012-2-24 16:55:34

经典

309090518 发表于 2012-2-24 19:58:58

支持下,

skysail 发表于 2012-3-2 10:55:50

请教下,我这几天基本把1.7.3升级到2.1.0一个问题似乎在您这基本找到答案,我把原来在application 下的 libraries 中的文件移动到application 下的 core 文件夹中,控制器里吧$this->load->library('getcode_helper');改为 $this->load->core('getcode_helper') 但问题又出现为
Fatal error: Call to undefined method CI_Loader::core() in D:\WWW\application\controllers\login.php on line 9
请问高人是何道理

yunnysunny 发表于 2012-3-3 13:26:13

skysail 发表于 2012-3-2 10:55 static/image/common/back.gif
请教下,我这几天基本把1.7.3升级到2.1.0一个问题似乎在您这基本找到答案,我把原来在application 下的 lib ...

为啥不放到libraries目录下呢?我原来libraries目录下的东西都没有动,直接能用。
页: [1] 2
查看完整版本: 关于CI1.7.3升级为2.1.0应该注意的那些事