Blogger Information
Blog 39
fans 0
comment 0
visits 30554
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
PHP:路由的解析
Original
1707 people have browsed it

URL的路由解析(pathinfo方式)

  1. <?php
  2. // 路由原理
  3. // 目标:将URL中的控制器,方法解析出来,映射到对应的控制器类和方法上
  4. // http://phpedu11//0514/pathinforoute.php/user/getuser/id/50/name/peter
  5. // pathinfo方式
  6. // 控制器
  7. class userController{
  8. public function getUser($id,$name){
  9. return "您的ID ==>$id , 您的姓名==>$name";
  10. }
  11. }
  12. // 1.解析出PATHINFO
  13. $pathinfo = array_values( array_filter(explode('/', $_SERVER['PATH_INFO']))) ;
  14. // print_r($pathinfo);
  15. // 2.解析出控制器
  16. $Controller = ucfirst(array_shift($pathinfo) ). 'Controller';
  17. // 3.解析出方法
  18. $action = array_shift($pathinfo) ;
  19. // 4.解析出参数
  20. $params = [];
  21. for ($i=0;$i<count($pathinfo);$i+=2){
  22. // 检查当前pathinfo变量是否有值?
  23. if(isset($pathinfo[$i+1])){
  24. $params[$pathinfo[$i]] = $pathinfo[$i+1];
  25. }
  26. }
  27. // parse_str($_SERVER['QUERY_STRING'] , $params);
  28. // 5.调用控制器的方法
  29. $User = new $Controller();
  30. 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

Correcting teacher:天蓬老师天蓬老师

Correction status:qualified

Teacher's comments:把这个理解 了, 后面学框架, 学路由就好办了
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post