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

来源:互联网 发布:mac apowersoft 编辑:程序博客网 时间:2024/05/21 08:44

一个简单的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
原创粉丝点击