当前位置: 代码迷 >> PHP >> 下面这个方法是起到路由作用的,它是如何完成这个流程的
  详细解决方案

下面这个方法是起到路由作用的,它是如何完成这个流程的

热度:42   发布时间:2016-04-28 17:25:08.0
下面这个方法是起到路由作用的,它是怎么完成这个流程的
/**
 * 控制器调度
 *
 */
private static function control(){
//二级域名
            //var_dump($GLOBALS['setting_config']['enabled_subdomain']);
if ($GLOBALS['setting_config']['enabled_subdomain'] == '1' && $_GET['act'] == 'index' && $_GET['op'] == 'index'){
$store_id = subdomain();
if ($store_id > 0) $_GET['act'] = 'show_store';
}
$act_file = realpath(BASE_PATH.'/control/'.$_GET['act'].'.php');
$class_name = $_GET['act'].'Control';
                //echo $act_file;
if ([email protected]($act_file)){
    if (C('debug')) {
        throw_exception("Base Error: access file isn't exists!");
    } else {
        showMessage('抱歉!您访问的页面不存在','','html','error');
    }
}
if (class_exists($class_name)){
$main = new $class_name();
$function = $_GET['op'].'Op';
if (method_exists($main,$function)){
$main->$function();
}elseif (method_exists($main,'indexOp')){
$main->indexOp();
}else {
$error = "Base Error: function $function not in $class_name!";
throw_exception($error);
}
}else {
$error = "Base Error: class $class_name isn't exists!";
throw_exception($error);
}
}

------解决思路----------------------
根据controler与action,判断要调用的类与方法

$act_file = realpath(BASE_PATH.'/control/'.$_GET['act'].'.php');
$class_name = $_GET['act'].'Control';

然后判断如果类和方法存在则调用,就这样。

if (class_exists($class_name)){
            $main = new $class_name();
            $function = $_GET['op'].'Op';
            if (method_exists($main,$function)){
                $main->$function();
            }elseif (method_exists($main,'indexOp')){
                $main->indexOp();
            }else {
                $error = "Base Error: function $function not in $class_name!";
                throw_exception($error);
            }
        }

  相关解决方案