如何在PHP中使用CodeIgniter框架

  介绍

如何在PHP中使用CodeIgniter框架?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

CodeIgniter(以下简称CI,官网以及中国站)是一个流行PHP的框架,小巧但功能强大,简洁轻量同时拥有很好的扩展性,在国内也比较受欢迎。另一方面,CI却没有与时俱进,并不支持PHP5.3之后的一些特性,导致它相对更适合较老一些的项目。虽然如此,CI仍是一个优秀的框架,而且它本身内核较小,源码优雅,适于学习。


如何在PHP中使用CodeIgniter框架”>,<br/> 1.指数。php作为前端控制器,初始化运行CodeIgniter所需要的基本资源。<br/> 2。HTTP路由器检查请求,以确定谁来处理请求。<br/> 3。如果缓存(缓存)文件存在,它将绕过通常的系统执行顺序,被直接发送给浏览器。<br/> 4。安全(安全性)。应用程序控制器(应用程序控制器)装载之前,HTTP请求和任何用户提交的数据将被过滤。<br/> 5。控制器(控制器)装载模型,核心库,辅助函数,以及任何处理特定请求所需的其它资源。<br/> 6。最终视图(视图)渲染发送到网页浏览器中的内容。如果开启缓存(缓存),视图首先被缓存,所以将可用于以后的请求。</p> <p>以上给出了一个大致流程。那么当看到页面在浏览器中呈现时,程序内部究竟是如何工作的呢? <br/>下面按照执行顺序,依次列出了CI框架主要加载的文件,并简要介绍其作用:</p> <p> <强> 01。index . php <br/> </强>定义使用环境(环境),框架路径(system_path BASEPATH),应用目录(application_folder),应用路径(APPPATH)等,加载(需要)CI核心文件<br/> <强> 02。BASEPATH/核心/CodeIgniter。php </强> (ps。实际上BASEPATH包含最后的文件分隔符& # 39;/& # 39;,这里额外加上了& # 39;/& # 39;是为了更清晰的展示)<br/>系统初始化文件,整个框架最核心的部分,在此加载(负载)了一系列的基类,并且执行这次请求<br/> <强> 03。BASEPATH/核心/常见。php <br/> </>强大的文件包含一系列的基础和公共函数,供全局使用,例如load_class (), get_config()等<br/> <强> 04。BASEPATH/核心/基准<br/> </强>这是一个基准测试类,默认标注了应用各个阶段的执行点,以得到其执行时间。也允许你自己定义监测点。<br/> <强> 05。BASEPATH/核心/Hooks.php <br/> </强> CI_Hooks是一个钩子类,是框架进行扩展的核心,能够在程序允许的各个阶段插入挂钩点,执行你自定义的类,函数等<br/> <强> 06。BASEPATH/核心/config。<br/> </>强配置文件管理类,加载读取或设置配置<br/> <强> 07。BASEPATH/核心/URI。php, BASEPATH/核心/Router.php <br/> </强> URI类帮助你解析请求的URI,并提供分割URI的函数集合,供路由器类使用<br/> <强> 08年。BASEPATH/核心/Router.php <br/> </>强路由类,即通过请求的uri,和用户配置的路由(APPPATH/config/routes.php),将用户请求分发到指定的处理函数中(通常来说是某一个控制器实例中某一行动函数)<br/> <强> 09年。BASEPATH/核心/输出。php, BASEPATH/核心/Input.php <br/> </>强输入类,即处理请求的输入参数,提供安全的获取方式。输出类将最后的执行结果发送出去,它还负责缓存的功能<br/> <强> 10。BASEPATH/核心控制器。php <br/> </>强控制器基类,用单例模式对外提供实例,整个应用程序的心脏。它是一个超级对象,在应用内加载的类都可以成为控制器的成员变量,这一点非常重要,会在之后继续,,,,,,,,讲到。<br/> <强> 11。APPPATH/控制器/美元RTR→fetch_directory ()。RTR→美元fetch_class() # 39;公司。php # 39; <br/> </>强通过路由功能,得到控制器名,实例化真正的控制器类(子类)<br/> <强> 12。BASEPATH/核心/Loader.php <br/> </强> CI_Loader用于加载应用程序中的各种类库,模型,视图、数据库,文件等,并设置成为控制器的成员变量<br/> <强> 13。中的call_user_func_array调用处理函数<br/> </>强通过路由,得到行动函数名,调用控制器→行动()函数,处理应用逻辑,实际业务处理逻辑便是在行动函数中写的<br/> <强> 14。美元从→_display()将内容输出</强> </p> <p>以上便是整个应用程序最基础的处理流程。下面选取核心内容代码再进行说明,以加强对CI的理解:</p> <pre类= & lt; php ?//* BASEPATH/系统/核心/Common.php//引导文件中基准,钩子,配置等都是通过这个函数进行加载的   function , load_class(类,美元,美元directory =, & # 39;图书馆# 39;,,prefix 美元;=,& # 39;CI_& # 39;)   {//记录加载过的类   static  _classes 美元;=,数组();//,已经加载过,直接读取并返回   if (收取(_classes美元(美元类)))   {   return  _classes美元(美元类);   }      $ name =,假;//,在指定目录寻找要加载的类   foreach (数组(APPPATH, BASEPATH), as 美元路径)   {   if  (file_exists(路径。目录强生# 39;美元/& # 39;。类强生# 39;美元。php # 39;))   {   $ name =,前缀。美元类;      if  (class_exists(名字)美元,===,假)   {   要求(路径。目录强生# 39;美元/& # 39;。类强生# 39;美元。php # 39;);   }      打破;   }   }//,没有找到   if  (name 美元;===,假)   {   退出(& # 39;Unable 用locate 从而specified 类:,& # 39;。类强生# 39;美元。php # 39;);   }//,追踪记录下刚才加载的类,is_loaded()函数在下面   is_loaded($类);      _classes美元(美元类),=,new  $ name ();   return  _classes美元(美元类);   }//,记录已经加载过的类。函数返回所有加载过的类   function , is_loaded (class 美元;=,& # 39;& # 39;)   {   static  _is_loaded 美元;=,数组();      if  (class 美元;!=,& # 39;& # 39;)   {   $ _is_loaded[函数(类)美元],=,美元类;   }      return  _is_loaded美元;   }//* BASEPATH/系统/核心/Controller.php   class  CI_Controller  {      private  static  $实例;      public  function  __construct ()   {   自我::$ instance =,,美元;//将所有在引导文件中(CodeIgniter.php)初始化的类对象(即刚才4,5,6,7,8,9等步骤),//注册成为控制器类的成员变量,就使得这个控制器成为一个超级对象(super 对象)   foreach  (is_loaded (), as  var 美元;=祝辞,美元类)   {   这→var 美元=,,load_class($类);   }   & lt; span 比;& lt;/span>//加载加载程序对象,再利用装载机对象对程序内一系列资源进行加载& lt; span 比;& lt;/span>   $ this→load =,, load_class(& # 39;装载机# 39;,,& # 39;核心# 39;);      $ this→负载→初始化();      log_message(& # 39;调试# 39;,,“Controller  Class  Initialized");   }//这个函数对外提供了控制器的单一实例   public  static  function , get_instance ()   {   return 自我::$实例;   }   }//* BASEPATH/系统/核心/CodeIgniter.php//,Load 从而,base  controller 类   require  BASEPATH强生# 39;核心/Controller.php& # 39;;//通过这个全局函数就得到了控制器的实例,得到了这个超级对象,//意味着在程序其他地方调用这个函数,就能得到整个框架的控制权   function 及get_instance ()   {   return  CI_Controller: get_instance ();   }//,加载对应的控制器类   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null

如何在PHP中使用CodeIgniter框架