博客列表 >php学习:第22章 路由原理与解析

php学习:第22章 路由原理与解析

王小飞
王小飞原创
2020年05月15日 16:38:59746浏览

介绍

解析出路由url的类,方法以及参数。
代码:

  1. <?php
  2. // 路由原理
  3. // 目标:将URL中的控制器,方法解析出来,映射到对应的控制器类和方法上
  4. // 控制器
  5. class UserController
  6. {
  7. // 创建一个方法,写出传入参数
  8. public function getUser($id, $name)
  9. {
  10. return "用户id ==> $id, 账户 ==> $name";
  11. }
  12. }
  13. //http://127.0.0.10/0514/index.php/控制器/方法/参数1/值1/参数2/值2/
  14. //http://127.0.0.10/0514/route1.php/user/getuser/id/188/name/qq3488326
  15. // 1. 解析出PATHINFO 将字符串利用‘/’切割 转为数组
  16. $pathinfo = array_values(array_filter(explode('/', $_SERVER['PATH_INFO'])));
  17. // print_r($pathinfo);
  18. // 2. 解析控制器
  19. $controller = ucfirst(array_shift($pathinfo)) . 'Controller';
  20. // 3. 解析控制器中的方法
  21. $action = array_shift($pathinfo);
  22. // print_r($pathinfo);
  23. // 4. 解析参数: pathinfo路径变量
  24. // 这里放的是从pathinfo中解析出来的变量组成的数组
  25. $params = [];
  26. for ($i=0; $i<count($pathinfo); $i+=2) {
  27. // 检查当前pathinfo变量是否有值?
  28. if (isset($pathinfo[$i+1])){
  29. $params[$pathinfo[$i]] = $pathinfo[$i+1];
  30. }
  31. }
  32. // print_r($params);
  33. // 5. 调用控制器方法
  34. $user = new $controller();
  35. echo $user->$action(...array_values($params));
  36. //http://127.0.0.10/0514/route1.php/user/getuser/id/188/name/qq3488326

效果

声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议