Correcting teacher:天蓬老师
Correction status:qualified
Teacher's comments:将url中变量解析出来的方式很多, 老师提供了一种方案, 你也可以想一下其它的实现方案
<?php
class UserController
{
public function getUser($id,$name){
return "id===>$id,name===>$name";
}
}
//1.解析出pathinfo
$pathinfo = array_filter(explode('/',$_SERVER['PATH_INFO']));
//2.解析控制器
$controller = array_shift($pathinfo).'Controller';
//3.解析控制器的方法
$action = array_pop($pathinfo);
//4.解析参数
parse_str($_SERVER['QUERY_STRING'],$params);
//5.调用控制器的的方法
$user = new $controller;
echo $user->$action(...array_values($params));
<?php
class UserController
{
public function getUser($id,$name){
return "我的id===>$id,我的name===>$name";
}
}
//1.解析出pathinfo
$pathinfo = array_filter(explode('/',$_SERVER['PATH_INFO']));
//2.解析控制器
$controller = array_shift($pathinfo).'Controller';
//3.解析控制器的方法
$action = array_shift($pathinfo);
for($i = 0;$i<count($pathinfo);$i+=2){
if(isset($pathinfo[$i+1])) $params[$pathinfo[$i]] = $pathinfo[$i+1];
}
//4.调用控制器中的方法
$user = new $controller;
echo $user->$action(...array_values($params));
总结:路由解析主要用到$_SERVER这个全局变量,通过PATH_INFO以及QUERY_STRING两个参数得到控制器方法以及传递的参数,对于后面一种全是通过’/‘的路由,在参数中需要进行判定其是否有相应的值。