【旧代码整理】uri路由处理的重要组成部分 Model_Route

一个简单的php mvc框架 的 代码说明,/project/model/route.php  uri路由处理的重要组成部分

/project/model/route.php

<?php
//当配置好__autoload后,直接Model_Route:get($uri)即可调用
class Model_Route {
	protected static $_instance = null;
	public static function instance(){
		if(self::$_instance == null){
			self::$_instance = new self();
		}
		return self::$_instance;
	}
	/*
	 * 根据配置的route规则(如:/project/application_www/route.php),
	 * 从 uri 解析出 controller name、action name、params
	 * 因为要伪静态嘛,所以写了这个,纯属兴致。不过,还挺好用。
	*/
	public static function get($uri){

		global $_route;
		$return = array();
		foreach($_route as $v){
		
			$has_params = preg_match_all('/\<(.*?)\>/',$v['url'],$m);
	
			$pattern = str_replace(array('?','(',')'),array('\?','(:?','){0,1}'),$v['url']);

			if($has_params){
				$param_keys = $m[1];
				foreach($param_keys as $p_k){
					$p_t = $v['params']['pattern']["{$p_k}"];
					$s_p = "(?P<{$p_k}>{$p_t}?)";
					$pattern = str_replace("<{$p_k}>",$s_p,$pattern);
				}
			}

			$pattern = str_replace(array('/','.'),array('\\/','\\.'),$pattern);

			$uri = preg_replace('/\?.*?$/','',$uri);
		
			$is_match = preg_match('/^'.$pattern.'$/',$uri,$matches);

			if($is_match){
				$return['controller'] = $v['controller']; 		
				$return['action'] = $v['action'];
				if(isset($v['params'])){
					foreach($v['params']['default'] as $p_k => $p_v){
						if(isset($matches["{$p_k}"])){
							$return['params']["{$p_k}"] = $matches["{$p_k}"];
						}
						else{
							$return['params']["{$p_k}"] = $p_v;
						}
					}
				}
				if(isset($v['html'])){
					$return['html'] = $v['html'];
				}
				break;
			}
		}
		
		return $return;

	}
	
	/*
	 * 这个method是和上面的相反的过程,根据配置的route规则,
	 * 输入contrller name、action name,$params,得到uri。
	 * 但这种情况很少碰到,一个uri定下来,就基本不会改了,
	 * 为什么不直接写uri,却要调用method?直接写uri好了。
	 * 空着!
	*/
	public static function uri($controller,$action,array $params){

	}
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值