php 解析地址
1.[代码][PHP]代码
/**
* 路由器【核心文件】
* @author hxm
* @version 1.0
* @since 2015.05.04
*/
class Router extends Object
{
public $module = 'indexAction'; //缺省控制器类名
public $action = 'index'; //控制器缺省方法
public $r = true; //是否可以自定义
/**
* 分解路由规则
*
* @accesspublic
* @returnarray
*/
public function path()
{
if ( trim(_URI_,'/') )
{
$url = explode('/', _URI_);
$this->module = $url[1];
$this->action = isset($url[2]) && !empty($url[2]) ? $url[2] : $this->action;
} else {
$this->module = $this->action;
}
if($this->r == false )
{
$made = array(
'module' => $this->module,
'action' => $this->action,
);
return $this->getObject($made , 'webApp');
} else {
return $this->rewrite($this->module, $this->action);
}
}
/**
* 重新定义框架重写规则
*
* @accessprivate
* @paramstring$mod控制器名
* @paramstring$action请求的操作
* @param string $route 规则文件
* @returnarray
*/
private function rewrite( $mod , $action )
{
$file = $this->route();
require $file;
$url = '/'.trim( _URI_ ,'/').'/';
if( isset($rules) )
{
foreach ($rules as $key => $val)
{
if(preg_match($val[0], $url) )
{
$mod = isset($val[1]['mod']) ? $val[1]['mod'] : $mod;
$action = isset($val[1]['action']) ? $val[1]['action'] : $action;
}
foreach ( $val[2] as $key => $value )
{
if ( !(strpos($value, '#') === FALSE) )
{
preg_match("$value", $url, $result);
$param[$key] = isset($result[1]) ? $result[1] : '';
} else {
$param[$key] = $value;
}
}
}
}
$made = array(
'module' => $mod,
'action' => $action,
'param' => $param
);
return $this->getObject($made , 'webApp');
}
}