abstract://命名空间 namespace tang; class Route{ //路由的配置信息 protected $route = []; //路由的模块/控制器/操作
//命名空间 namespace tang; class Route{ //路由的配置信息 protected $route = []; //路由的模块/控制器/操作 public $pathinfo = []; //路由的参数 public $params = []; //构造器 public function __construct($route) { $this->route = $route; } //解析路由 public function parse($queryStr = ""){ //第一步:切割为数组 $queryStr = trim(strtolower($queryStr),'/'); $queryStr = explode('/',$queryStr); //$queryStr = array_filter($queryStr); //2.解析出数组中的内容 switch (count($queryStr)) { //如果是空数组就是默认模块,控制器,操作 case 0: $this->pathinfo = $this->route; break; //有模块,没有控制器和操作 case 1: $this->pathinfo['module'] = $queryStr[0]; break; //有模块,有控制器没有操作 case 2: $this->pathinfo['module'] = $queryStr[0]; $this->pathinfo['controller'] = $queryStr[1]; break; //有模块,有控制器,有操作 case 3: $this->pathinfo['module'] = $queryStr[0]; $this->pathinfo['controller'] = $queryStr[1]; $this->pathinfo['action'] = $queryStr[2]; break; //参数进行处理 default: $this->pathinfo['module'] = $queryStr[0]; $this->pathinfo['controller'] = $queryStr[1]; $this->pathinfo['action'] = $queryStr[2]; //从索引的第三个参数起,每第四个都成对出现 $arr = array_slice($queryStr,3); for($i=0;$iparams[$arr[$i]] = $arr[$i+1]; } } break; } return $this; } //请求分发 public function dispatch() { //生成控制器类名称: app\模块\controller\控制器类; //模块名 $module = $this->pathinfo['module']; //拿到控制器类名 $controller = '\app\\'.$module.'\controller\\'.$this->pathinfo['controller']; //操作名 $action = $this->pathinfo['action']; //判断下类中是否有操作没有的话,执行默认的方法 if (!method_exists($controller,$action)){ $action = $this->route['action']; echo '没有操作'; } //用户亲求到指定的控制器操作上 return call_user_func_array([new $controller,$action],$this->params); } } $d = $_SERVER['QUERY_STRING']; //配置文件数组 $route = require 'config.php'; //实例化对象 $route = new Route($route); //方法 $route->parse($d); echo " "; //打印解析出的模块/控制器/方法 print_r($route->pathinfo); //打印参数 print_r($route->params); require __DIR__.'/../app/admin/controller/Index.php'; echo $route->dispatch();namespace app\admin\controller; class Index{ public function index($name,$age){ echo '你好我是Index中的index方法'.'参数name='.$name.' '.'age='.$age; } }
Correcting teacher:查无此人Correction time:2019-01-26 09:20:47
Teacher's summary:完成的不错。像这样的作业,可以写写你对路由的理解。批作业时,可以告诉你哪里不足。继续加油