路由器解析
1.解析http://php11.edu/0514/route.php/user/getuser?id=100&name=admin这种类型路由
<?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));
2.解析http://php11.edu/0514/route1.php/user/getuser/id/300/name/Admin/salary这种类型路由
<?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两个参数得到控制器方法以及传递的参数,对于后面一种全是通过’/‘的路由,在参数中需要进行判定其是否有相应的值。