CI之uri初步理解

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

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

CI之uri初步理解_第1张图片

实例化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初步理解)