博主信息
博文 47
粉丝 1
评论 0
访问量 66269
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
PHP - 路由原理
晴天
原创
975人浏览过

1. 路由原理

目标:将URL中的控制器,方法解析出来,映射到对应的控制器类和方法上

  1. <?php
  2. //创建控制器
  3. class UserController
  4. {
  5. // 创建方法
  6. public function getUser($id, $name)
  7. {
  8. // 直接返回数据
  9. return "id ===> $id , name ===> $name";
  10. }
  11. }
  12. //http://php11.edu/0514/index.php/控制器/方法/参数1/值1/参数2/值2/
  13. //http://php11.edu/0514/index.php/user/getuser/id/200/name/admin
  14. //1.先拿到$_SERVER['PATH_INFO']数据
  15. //$pathinfo = $_SERVER['PATH_INFO'];
  16. //echo $pathinfo; // 输出 /user/getuser/id/200/name/admin
  17. //2.将字符串利用‘/’切割 转为数组
  18. //$pathinfo = explode('/', $pathinfo);
  19. //print_r($pathinfo);
  20. //输出
  21. //Array
  22. //(
  23. //[0] =>
  24. //[1] => user
  25. //[2] => getuser
  26. //[3] => id
  27. //[4] => 200
  28. //[5] => name
  29. //[6] => admin
  30. //)
  31. //3.将数组中的空值移除
  32. //$pathinfo = array_filter($pathinfo);
  33. //print_r($pathinfo);
  34. //输出
  35. //Array
  36. //(
  37. //[1] => user
  38. //[2] => getuser
  39. //[3] => id
  40. //[4] => 200
  41. //[5] => name
  42. //[6] => admin
  43. //)
  44. // 4. 将数组键值进行重排
  45. //$pathinfo = array_values($pathinfo);
  46. //print_r($pathinfo);
  47. //输出
  48. //Array
  49. //(
  50. //[0] => user
  51. //[1] => getuser
  52. //[2] => id
  53. //[3] => 200
  54. //[4] => name
  55. //[5] => admin
  56. //)
  57. ### 将前几步组合到一起
  58. $pathinfo = array_values(array_filter(explode('/',$_SERVER['PATH_INFO'])));
  59. //print_r($pathinfo); // 输出值与第四步相同
  60. //获取控制器 去除数组中的第一个值并进行首字母大写
  61. $controller = ucfirst(array_shift($pathinfo)).'Controller';
  62. //echo $controller; //输出 UserController
  63. //获取方法 注意方法不区分大小写
  64. $action = array_shift($pathinfo);
  65. //echo $action; // 输出 getuser
  66. //获取参数 当前数组中仅剩键值 使用for循环 获取
  67. //print_r($pathinfo);
  68. //输出
  69. //Array
  70. //(
  71. //[0] => id
  72. //[1] => 200
  73. //[2] => name
  74. //[3] => admin
  75. //)
  76. $params = [];
  77. for ($i = 0 ; $i <= count($pathinfo) ; $i+=2){
  78. // 判断如果当前键值对的下一个键值对存在则执行
  79. if (isset($pathinfo[$i+1])){
  80. $params[$pathinfo[$i]] = $pathinfo[$i+1];
  81. }
  82. }
  83. //打印一下数组
  84. //print_r($params);
  85. //输出
  86. //Array
  87. //(
  88. // [id] => 200
  89. // [name] => admin
  90. //)
  91. //开始调用
  92. //实例化控制器
  93. $user = new $controller;
  94. //调用方法并传值
  95. echo $user->$action(...array_values($params));
  96. //输出 id ===> 200 , name ===> admin
  97. // 成功获取到值
批改老师:天蓬老师天蓬老师

批改状态:合格

老师批语:路由的形式非常多, 而且是http请求到达控制器的第一步, 是整个网站的哨兵
本博文版权归博主所有,转载请注明地址!如有侵权、违法,请联系admin@php.cn举报处理!
全部评论 文明上网理性发言,请遵守新闻评论服务协议
0条评论
作者最新博文
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号

  • 登录PHP中文网,和优秀的人一起学习!
    全站2000+教程免费学