`
- 浏览:
259686 次
- 性别:
- 来自:
未定
-
CI stand for CodeIgniter, 代码加速器,一个轻便的PHP框架. lightweigh对于PHP是很重要的, 对于每一个請求,PHP都是重新初始化所有的资源,包括内存,数据库,文件源. 请求结束后, 又将所有的资源销毁掉, 因此这PHP比较不会出现memery leak之类的错误,就算代码写得很烂.
在框架大行其道的时候,PHP也玩上了框架,越玩越大, PHP本身也越搞越复杂. 而框架的初始是需要很多资源的,特别是一些比较大的框架, 而很多时候的请求并不需要初始化太多东西, 因此PHP的开发越来越快, 运行速度,性能就越来越慢.
基于PHP这种特性,且也不太喜欢他的语法, 因此大学结束后基本没接触过PHP. 后来因为项目关系, 重新拾起了PHP. 项目使用了CI框架, 所以也就对此进行了研究.
CI 也玩MVC, 所有的请求都是通过前端index.php这个控制器, 根据URI转发给相应的控制器完成业务逻辑, 数据结果传给View, 前端控制器调用View的结果(Output)返回给web服务器. 整个过程比较清晰.
CI 关键类是Config, Router, URI, Output
a. Config主要是加载系统的配置信息
b. URI通过分析请求URL(PATH_INFO,REQUEST_URI...),获取请求信息,也叫request_string,比如请求/index.php/product/list/1/2, 分析结果是/product/list/1/2
c. Router通过URI的request_string,得到相应的类和方法.CI 的URI是restful的,约定大于配置.比如请求/index.php/product/list/1/2, 表示请求Product类的list方法, 1,2是传给方法的参数(位置相关)
d. 主控制器通过Router得到类和方法, 调用,生成相应的结果Output. 主控制器返回结果给web服务器
CI 会初始化几个关键的类, 之后需要用到的各种libraries, helper是通过Loader这个关键类进行动态加载的.包括database相关的类, 各种应用相关的帮助类
CI 的database
采用了Active Record这个模式, 可以向database发送平台有关的sql命令, 也可忽略database平台,而采用Active Record. 一开始我是不想用ActiveRecord的,因为他把sql的各部分根据后台数据库平台组装成平台相关的sql, 我是怕这里可能比较耗资源, 也喜欢直接写长长的sql, 但是后来想想可能要支持多个数据库,比如mysql, pgsql, oracle. 还是使用Active Record.数据库是相对比较耗资源的操作,数据能缓存就尽量缓存,能不初始化数据库连接就不去初始化
CI的错误控制Exception
首先他将php的错误通过set_error_handler由自己控制, 通过Exception, Log将错误重新包装,写入相关日志.对其他各种错误也是通过Exception,Log进行处理.
CI的核心点Controller
Controller有各种关键类的引用, 特别是loader, 可以在方法中加载需要的类. $this->load->module,$this->load->helper, $this->load->libraries, $this->load->database, $this->load->view
尽量只在需要的方法中load, 特别是database.
CI的数据模式Module类
Module一般表示关系数据库中的一个表, 相关的数据库操作都可以在此操作, 结果由Controller来获取.Module初始化的时候会将Controller的关键类引用也导入自己的引用,因此他也有loader之类的对象属性
CI的展示层View类
CI不推荐使用模板引擎, 他本身也有个简单的模板引擎.我也觉得在html中使用原生PHP好过新的模板语言, 一来是模板语言最終还是要转化为PHP,这有个性能问题, 二来嵌入html本就是PHP以前干的事,对前端也不会有太大的困扰,也不会有复杂的逻辑,更不会有业务相关逻辑.
View是通过Controller调用的,因此View里面可以使用$this->load->view()进行页面嵌套, 而Controller其他属性对象如$this->db之类的就不推荐使用了.
Controller将view的结果传到Output类中, 前端控制器调用Output相关方法取出结果返回web服务器
CI的一些问题:
经过研究CI的源码, 发现一些不知是不是问题的问题
a. Loader加载library时,会重新对已加载的Module进行_assign_libraries,也就是为了将这个library的引用加入到Module,我觉得是多余的.因为一个library对Module不会有很大的作用,就算有,也可以在Module中自己加载, 况且Module初始化时会自己_assign_libraries.因为library一般是先于Module进行加载的.
Loader加载Module还有个_assign_libraries的重复操作
b. DB_driver中query方法,如果请求失败, 如果没有设置debug为true的话,是没有任何提示的, 我觉得应该在这个点上提供一个口,可以进行Log之类的操作.
还有就是DB_utility,DB_forge简直是鸡肋, 这两个类基本是一些数据库修改的操作,比如create_database, list_databases,这些方法对于想写phpAdmin之类的应用可能比较有用, 对一般的应用就是鸡肋.而偏偏这些鸡肋在数据库加载时也加载了,简直是浪费资源
c. Router的 _parse_request_uri方法没有效果,写得乱七八糟,最简单的就是将index.php跟之前的内容去掉,后面的内容就是所需的request_string
d. 还有scaffolding也是鸡肋,CI也不推荐使用了,不安全.
f. 在linux下,文件名是区分大小写的,因此load controller,module时可能会出现找不到文件的错误,而在window下没有此问题.
所以controler的类名应该跟url中的类字段大小写一样才行
至于module 可以在Loader.php中的module方法下注释掉
$module = strtolower($module)
g.还有就是在linux下database.php配置文件的hostname如果是localhost的话会出现连接不了,可以换成127.0.0.1
分享到:
Global site tag (gtag.js) - Google Analytics
相关推荐
Python课程设计,含有代码注释,新手也可看懂。毕业设计、期末大作业、课程设计、高分必看,下载下来,简单部署,就可以使用。 包含:项目源码、数据库脚本、软件工具等,该项目可以作为毕设、课程设计使用,前后端代码都在里面。 该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。
《松鼠》生态性课堂体验教案
Java系统源码+智慧图书管理系统 内容概要: 本资源包含了完整的Java前后端源码及说明文档,适用于想要快速搭建并部署Java Web应用程序的开发者、学习者。 技术栈: 后端:Java生态系统,包含Spring Boot、Shiro、MyBatis等,数据库使用Mysql 前端:Vue、Bootstrap、Jquery等 适用场景示例: 1、毕业生希望快速启动一个新的Java Web应用程序。 2、团队寻找一个稳定的模板来加速产品开发周期。 3、教育机构或个人学习者用于教学目的或自学练习。 4、创业公司需要一个可以立即投入使用的MVP(最小可行产品)。
项目包含前后台完整源码。 项目都经过严格调试,确保可以运行! 具体项目介绍可查看博主文章或私聊获取 助力学习实践,提升编程技能,快来获取这份宝贵的资源吧!
《松鼠》教学方案
学生角色 学生用户在系统的前台界面可以浏览站内新闻、系统公告等公共的信息,在进行了注册和登录等操作后可以进入个人后台管理界面,对自己的个人信息进行管理,还可以进行实验成绩查看和实验交流等操作。 教师角色 教师用户也可以正常使用本系统的前台功能,但最主要的功能还是在个人后台界面中。在教师的个人后台界面中,首先教师可以管理自己的个人信息,还可以对学生进行实验任务书下达,对学生的实验成果和实验成绩管理等操作。 管理员角色 系统管理员可以管理整个系统的数据,比如可以管理教师和学生的个人资料,对违反了网站及学校实验室规定的同学可以进行删除。除了管理教师和学生的信息外,管理员用户还可以对公告信息及新闻信息等进行管理。 环境说明: 开发语言:Java 框架:ssm,mybatis JDK版本:JDK1.8 数据库:mysql 5.7 数据库工具:Navicat11 开发软件:eclipse/idea Maven包:Maven3.3 服务器:tomcat7
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、本项目仅用作交流学习参考,请切勿用于商业用途。
管理员 管理员管理 工作人员管理 用户管理 公告信息管理 往届项目管理 工作人员 个人资料修改 公告查看 项目申报信息管理,发布(项目申报信息、要求、时间节点等信息) 项目模板管理 往届项目查询 用户 个人资料修改 公告查看 项目模板下载 项目申报信息查看 我的项目申报 项目申报结果查看 环境说明: 开发语言:Java 框架:ssm,mybatis JDK版本:JDK1.8 数据库:mysql 5.7 数据库工具:Navicat11 开发软件:eclipse/idea Maven包:Maven3.3 服务器:tomcat7
福禄寿FloruitShow - 多一个世界 [mqms].ogg
Python课程设计,含有代码注释,新手也可看懂。毕业设计、期末大作业、课程设计、高分必看,下载下来,简单部署,就可以使用。 包含:项目源码、数据库脚本、软件工具等,该项目可以作为毕设、课程设计使用,前后端代码都在里面。 该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。
商业企业资本结构与公司价值关系研究 开题报告.docx
间位芳纶纸全球市场研究报告:2023年市场规模达到约6.31亿美元 在特种纸材料领域,间位芳纶纸以其高强度、耐高温、耐腐蚀、本质阻燃和卓越的电绝缘性能,成为了现代工业不可或缺的关键材料。从电气绝缘到蜂窝结构材料,再到民间用品,间位芳纶纸的广泛应用不仅推动了多个行业的进步,更展现了其巨大的市场潜力。然而。本文将深入探讨间位芳纶纸市场的现状、技术创新、应用领域、竞争格局及未来趋势,并强调用户咨询在引领市场发展中的关键作用。 市场概况 据QYR最新调研,2023年全球间位芳纶纸市场规模达到约6.31亿美元,同比增长12.88%。这一增长主要得益于电气绝缘领域和蜂窝芯材领域的强劲需求。电气绝缘领域作为间位芳纶纸的主要应用领域,2023年占比高达62.76%,而蜂窝芯材领域则紧随其后,占比34.71%。在中国市场,间位芳纶纸的发展同样令人瞩目。尽管起步较晚,但得益于技术进步和政策支持,国内间位芳纶纸市场规模持续走高,从2016年的4.8亿元增长至2023年的10亿元,期间复合年增长率为12.01%。 技术创新与趋势 技术创新是推动间位芳纶纸市场发展的核心动力。随着纳米技术、智能制造等技术的不断发
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、本项目仅用作交流学习参考,请切勿用于商业用途。
Python 批量转换PPT、Excel、Word为PDF文件工具
四川大学期末考试试题(开卷).pdf
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、本项目仅用作交流学习参考,请切勿用于商业用途。
springboot-基于JavaScript的在线考试系统.zip
深圳市2005-2024年近20年的历史气象数据,每3小时更新一次数据,参数包含气温、气压、降水量、云层、能见度、风向、湿度等,几万条数据
Python课程设计,含有代码注释,新手也可看懂。毕业设计、期末大作业、课程设计、高分必看,下载下来,简单部署,就可以使用。 包含:项目源码、数据库脚本、软件工具等,该项目可以作为毕设、课程设计使用,前后端代码都在里面。 该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。
2024北邮数电大实验——实验3:水位检测与控制 全功能代码开源。本人期末复习任务繁重,代码无时间作详细注释。