/demo/mycore/dispather.php request url解析器对象定义

<?php
//request url解析器对象定义

class MYCORE_DISPATHER extends CORE_DISPATHER
{
	static function dispath() {
		$rules									= array();
		$rules['role'][0]['rule']				= '/^mod\/(\d+)/';    //排除
		$rules['role'][0]['match']				= array( 'role_id' ); //匹配
		$rules['role'][0]['action']				= 'mod';              //方法
		
		$rules['role'][1]['rule']				= '/^enabled\/(\d+)/';
		$rules['role'][1]['match']				= array( 'role_id', 'role_disabled' => 0 );
		$rules['role'][1]['action']				= 'enable';
		
		$rules['role'][2]['rule']				= '/^disabled\/(\d+)/';
		$rules['role'][2]['match']				= array( 'role_id', 'role_disabled' => 1 );
		$rules['role'][2]['action']				= 'enable';
		
		$rules['admin'][0]['rule']				= '/^mod\/(\d+)/';
		$rules['admin'][0]['match']				= array( 'admin_id' );
		$rules['admin'][0]['action']			= 'mod';
		
		$rules['admin'][1]['rule']				= '/^enabled\/(\d+)/';
		$rules['admin'][1]['match']				= array( 'admin_id', 'admin_disabled' => 0 );
		$rules['admin'][1]['action']			= 'enable';
		
		$rules['admin'][2]['rule']				= '/^disabled\/(\d+)/';
		$rules['admin'][2]['match']				= array( 'admin_id', 'admin_disabled' => 1 );
		$rules['admin'][2]['action']			= 'enable';
		
		
		
		$rules['user'][0]['rule']				= '/^mod\/(\d+)/';
		$rules['user'][0]['match']				= array( 'user_id' );
		$rules['user'][0]['action']			    = 'mod';
		
		$rules['user'][1]['rule']				= '/^del\/(\d+)/';
		$rules['user'][1]['match']				= array( 'user_id');
		$rules['user'][1]['action']			    = 'del';
		
		
		//跟框里面需要处理的函数一样,但还是要详细看一下
		if( isset( $_SERVER ['PATH_INFO'] ) ){
			$_a_matchs			= array ();
			$paths				= explode ( C( 'OPTION_SEPARATOR' ), trim( $_SERVER['PATH_INFO'], C( 'OPTION_SEPARATOR' ) ) );
			//取得去掉实际路径以后的路径信息
			//取得控件器信息
			$_s_ctrl			= strtolower ( array_shift ( $paths ) );

			//将paths按OPTION_SEPARATOR分割一下
			$_s_pathinfo		= implode ( C( 'OPTION_SEPARATOR' ), $paths );
			
			//var_dump($rules[$_s_ctrl]);
			
			//如果在$rules数组里面有对该控件进行设置的话,那么往下执行
			if ( isset( $rules[$_s_ctrl] ) ){
				//开始循环数组
				foreach( $rules[$_s_ctrl] as $rule ) {
					//将$_s_pathinfo字符串的中$rule['rule']字符进行行去掉处理,然后放入一个叫$_a_matchs的数组中
					preg_match( $rule['rule'], $_s_pathinfo, $_a_matchs );
					//preg_match preg_match — 执行一个正则表达式匹配
					//搜索subject与pattern给定的正则表达式的一个匹配.
					//var_dump($_a_matchs);
					if( empty( $_a_matchs ) ) //如果为空,直接返回
						continue;
					
					array_shift( $_a_matchs );//删除批一个元素
					//开始循环需要配置的值
					foreach ( $rule['match'] as $key => $id ) {
						//如果是数值,直接
						if( is_numeric( $key ) ){//is_numeric 如果 var 是数字和数字字符串则返回 TRUE,否则返回 FALSE
							$_GET[$id] = $_a_matchs[$key]; //放入到$_GET数组中去
						} else {
							$_GET[$key] = $id; //也同样,放入到$_GET数组中去
						}
					}
					//设置控件器
					$_GET[C( 'VAR_CONTROLLER' )]	= $_s_ctrl;
					//设置方法名
					$_GET[C( 'VAR_ACTION' )]		= $rule['action'];
					return true;
				}
			}
		}
	}
}

  

posted @ 2013-05-05 14:11  简单--生活  阅读(341)  评论(0)    收藏  举报
简单--生活(CSDN)