欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

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

程序员文章站 2022-06-09 14:13:49
...
/**	 * 控制器调度	 *	 */	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 (!@include($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);            }        }