用户
 找回密码
 入住 CI 中国社区
搜索
查看: 8040|回复: 12
收起左侧

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

    [复制链接]
发表于 2012-2-6 22:51:04 | 显示全部楼层 |阅读模式
本帖最后由 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。
    • PHP复制代码
      parent::Controller();
      复制代码
      替换为
      PHP复制代码
      parent::__construct();
      复制代码

    • PHP复制代码
      parent::Model();
      复制代码
      替换为
      PHP复制代码
      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 所以就不多说了。

评分

参与人数 3威望 +15 收起 理由
素颜衬红妆凄美 + 5
Hex + 5 赞一个!
huboo82 + 5 不错的经验总结

查看全部评分

发表于 2012-2-7 12:02:41 | 显示全部楼层
支持!
发表于 2012-2-7 13:08:24 | 显示全部楼层
太好了。正需要啊~
发表于 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:}
 楼主| 发表于 2012-2-24 10:44:13 | 显示全部楼层
select * form user where name='cc' and style_id in (select style_id from sometable where theCondition);
发表于 2012-2-24 16:55:34 | 显示全部楼层
经典
发表于 2012-2-24 19:58:58 | 显示全部楼层
支持下,
发表于 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
请问高人是何道理
 楼主| 发表于 2012-3-3 13:26:13 | 显示全部楼层
skysail 发表于 2012-3-2 10:55
请教下,我这几天基本把1.7.3升级到2.1.0一个问题似乎在您这基本找到答案,我把原来在application 下的 lib ...

为啥不放到libraries目录下呢?我原来libraries目录下的东西都没有动,直接能用。

本版积分规则