URL的路由解析(pathinfo方式)
<?php
// 路由原理
// 目标:将URL中的控制器,方法解析出来,映射到对应的控制器类和方法上
// http://phpedu11//0514/pathinforoute.php/user/getuser/id/50/name/peter
// pathinfo方式
// 控制器
class userController{
public function getUser($id,$name){
return "您的ID ==>$id , 您的姓名==>$name";
}
}
// 1.解析出PATHINFO
$pathinfo = array_values( array_filter(explode('/', $_SERVER['PATH_INFO']))) ;
// print_r($pathinfo);
// 2.解析出控制器
$Controller = ucfirst(array_shift($pathinfo) ). 'Controller';
// 3.解析出方法
$action = array_shift($pathinfo) ;
// 4.解析出参数
$params = [];
for ($i=0;$i<count($pathinfo);$i+=2){
// 检查当前pathinfo变量是否有值?
if(isset($pathinfo[$i+1])){
$params[$pathinfo[$i]] = $pathinfo[$i+1];
}
}
// parse_str($_SERVER['QUERY_STRING'] , $params);
// 5.调用控制器的方法
$User = new $Controller();
echo $User->$action(...array_values($params));
演示效果
总结:
1.URL含有丰富的路由信息。今天学习了如何把URL中的控制器、方法、参数等解析出来,再测试能否调用控制器的方法。
2.查询变量:获取URL中查询字符串(?后面的参数)
$_GET : 获取URL中?后面的参数,返回一个数组。要用implode()才能分解为查询字符串。
$_SERVER[‘QUERY_STRING’]:获取URL中?后面的参数,直接返回查询字符串。
3.路径变量:获取URL中pathinfo方式的字符串(含控制器、方法、参数、值等)。
$_SERVER[‘PATH_INFO’] : 返回一个pathinfo变量的字符串。
$_SERVER[‘QUERY_URI’]:返回一个接近完整的URL信息。
4.路由解析:
解析出PATHINFO->解析出控制器->解析出方法->解析出参数->调用控制器的方法
5.composer安装成功。
版本号:Composer version 1.10.6 2020-05-06 10:28:10