码迷,mamicode.com
首页 > 其他好文 > 详细

CI之uri初步理解

时间:2015-11-14 14:58:09      阅读:495      评论:0      收藏:0      [点我收藏+]

标签:

初学CI框架,由于php基础也没太好,学起来还是有点困难。看了看URI和Router源码,把自己的理解写下来。可能会有理解错误或不道位的地方。慢慢来。

首先CI框架是通过一个入口文件index.php(主要内容是被包含的CodeIgniter.php)来访问,其自身有自己的访问路径规则(主要是通过URI类和Router类对路径进行解析实现)

技术分享

实例化URI对象,它会执行如下动作(部分)

  ··获得配置信息对象。

  ··根据uri_protocol选择调用url解析方法。

  ··返回解析处理后uri信息格式,如下

      controller/function/parameters

  ··初始化uri_string(string)和segments(array)成员变量。其中,uri_string是uri信息经过ascii过滤后的字符串,segments是从1开始的存储controller,function,parameters的数组。

 

实例化Router对象,执行如下动作(部分)

  ··获取配置对象。

  ··获取URI对象。

  ··获取routes配置信息。

  ··判断URI->uri_string是否为空来选择执行方法_parse_routes()或者_set_default_controller()。即判断是否存在选定的controller或是function或param,如果不存在,则调用默认controller。(在此假定存在)

  ··调用_parse_routes()方法,获取routes配置信息,来判断是否要对uri进行重映射。比如:

    若有配置信息$route[‘key‘] = ‘controller/function/111‘,那么当你访问index.php/key时,在此函数中会对uri进行匹配并替换操作成 index.php/controller/function/111

    其中有通配符:any和:num分别对应正则[^/]+和[0-9]+,匹配替换和上例类似。

   然后将重映射的uri以 ‘/‘ 进行拆分成数组形式,并执行_set_request(array segments[])方法,获取uri中的controller,function和parameters等信息,并对$class,$method等成员赋值。

 

然后,在CodeIgniter.php中,获取实例化Router对象的$class,$method成员。通过判断$class,$method或者$class中的$method方法是否存在,或是方法名是否以 ‘_‘(下划线)开始等方式 来判断访问方式是否正确,正确则正常执行,不正确则返回404页面。

 

CI之uri初步理解

标签:

原文地址:http://www.cnblogs.com/onyourway/p/4964259.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!