好!欢迎访问迷津渡口 现在时间是:

迷津渡口

越感到迷惑 越接近真理

emlog MVC解构5--Dispatcher和路由表分析

注意:前台MVC结构功能主要是向服务器请求数据,只有评论是提交数据。


Dispatcher:路由分发器,可谓是emlog MVC结构的关键。

所谓路由,就是确定到达目的的最佳路径和通过网络传输信息。


在emlog里面,路由分发器的作用与路由类似:

路由分发器获取到目的路径,通过正则表达式等判断,获得需要调用的Controller、方法及参数。

Controller获取数据后把数据发送给相应的模型,模型处理好相应的数据后有存储到数据库里面或者更新缓存和变量,最后Controller将信息传递给View,进行输出。


下面详细解析Dispatcher类:

属性列表:

属性注释
static $_instance静态属性,保存一个实例化的Dispatcher对象
private $_model目标请求模块,保存Controller的类名
private $_method目标请求模块方法,保存Controller调用的方法名
private $_params目标请求参数,保存正则表达式获取的路径和路径分量构成的一个数组
private $_routingTable路由表,保存通过Options::getRoutingTable()的静态方法返回的路由表,为二阶数组
private $_path访问路径,函数处理后不包含 BLOG_URL和index.php的路径

方法列表:

方法注释
private function __construct()
构造方法,调用setPath()方法配置$_path,获取$_routingTable,迭代分析路由表数据,利用正则表达式判断配置$_model,$_method,$_params
public static function getInstance()静态方法,实例化静态属性$_instance并返回
public function dispatch()实例化$_model对象,并调用$_method方法,参数为$_params
public static function setPath()静态方法,返回去除干扰项的路径$path


下面分析一下所谓的路由表:

$routingtable = array(
    array(
	'model' => '模型的名称',
	'method' => '调用的方法',
	'reg_0' => '正则表达式',
	'reg_1' => '正则表达式',
	...
    ),
    ...
);

容易发现除了calendar,所有的model都是Controller,在类文件include/controller路径下。

calendar是一个工具类,在include/lib下面,你可以通过

BLOG_URL.'?action=cal'

获得一个个性化的日历。例如http://www.qingzz.cn/?action=calhttp://www.qingzz.cn/index.php?action=cal


method就是将要调用的方法,reg_*就是正则表达式啦,和isurlrewrite参数有关,但reg_0是默认的路径,如果路径无法匹配'reg_'.Option::get('isurlrewrite')所对应的表达式,但能匹配reg_0所对应的表达式则依旧可行,前者优先匹配。

正则表达式具体如何匹配就不分析了,自己看。


提供简单方法查看处理后的路径调用的是哪个Controller,方法和参数,修改dispatch()方法为:

public function dispatch(){
    $module = new $this->_model();
    $method = $this->_method;
    print '$_path:'.$this->_path."<br>".
          '$_model: '.$this->_model."<br>".
          '$_method: '.$this->_method."<br>".
          '$_params: ';
    print_r($this->_params);
    $module->$method($this->_params);
}

可以通过改变访问路径不断验证理解的正则表达式是否正确啦~

点赞1
   支持一下
挤眼 亲亲 咆哮 开心 想想 可怜 糗大了 委屈 哈哈 小声点 右哼哼 左哼哼 疑问 坏笑 赚钱啦 悲伤 耍酷 勾引 厉害 握手 耶 嘻嘻 害羞 鼓掌 馋嘴 抓狂 抱抱 围观 威武 给力
 点赞
 签到
 表情
 图片
 代码
提交评论

清空信息
关闭评论
 00:00/00:00
我想和你虚度时光 - 花房姑娘(9)
  1. 恋恋风尘
  2. 恋恋风尘
  3. 恋恋风尘
  4. 恋恋风尘
  5. 恋恋风尘
  6. 恋恋风尘
  7. 恋恋风尘
  8. 恋恋风尘
  9. 恋恋风尘