<?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;
}
}
}
}
}