Blogger Information
Blog 119
fans 3
comment 1
visits 94629
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
路由原理与实现流程
赵大叔
Original
714 people have browsed it

路由

路由原理:从url地址中解析数据。

  • _GET: 返回查询字符串拆解的数组
  • implode(): 将数组切割成字符串
  • vprintf:按照指定模板打印
  • $_SERVER['QUERY_STRING'];获取url地址的查询字符串
  • $_SERVER['PATH_INFO'];获取地址的PATHINFO变量/ 路径变量
  • $_SERVER['REQUEST_URI'];获取相对于当前主机名下的文件的绝对路径

演示查询变量解析:

  1. <?php
  2. // 写一个简单的控制器
  3. class MyController
  4. {
  5. public function getInfor($name, $salary)
  6. {
  7. return "员工姓名: ==> $name, 工资: ==> $salary";
  8. }
  9. }
  10. // http://php.io/0514/route.php/MyController/getInfor/?name=dashu&salary=10000
  11. // 1. 解析出PATHINFO
  12. $pathinfo = array_values(array_filter(explode('/', $_SERVER['PATH_INFO'])));
  13. // print_r($pathinfo);
  14. // 2. 解析控制器
  15. $controller = ucfirst(array_shift($pathinfo));
  16. // 3. 解析控制器中的方法
  17. $action = array_shift($pathinfo);
  18. // 4. 解析参数
  19. parse_str($_SERVER['QUERY_STRING'], $params);
  20. // 5. 调用控制器方法
  21. $mycontroller = new $controller();
  22. echo $mycontroller->$action(...array_values($params));

效果图:

演示PATHINFO变量解析:

  1. <?php
  2. // 写一个简单的控制器
  3. class MyController
  4. {
  5. public function getInfor($name, $salary)
  6. {
  7. return "领导姓名: ==> $name, 领导工资: ==> $salary";
  8. }
  9. }
  10. // http://php.io/0514/route1.php/MyController/getInfor/name=sep&salary=30000
  11. // 1. 解析出PATHINFO
  12. $pathinfo = array_values(array_filter(explode('/', $_SERVER['PATH_INFO'])));
  13. // print_r($pathinfo);
  14. // 2. 解析控制器
  15. $controller = ucfirst(array_shift($pathinfo));
  16. // 3. 解析控制器中的方法
  17. $action = array_shift($pathinfo);
  18. // print_r($pathinfo);
  19. // 4. 解析参数: pathinfo路径变量
  20. // 这里放的是从pathinfo中解析出来的变量组成的数组
  21. $params = [];
  22. for ($i=0; $i<count($pathinfo); $i+=2) {
  23. // 检查当前pathinfo变量是否有值?
  24. if (isset($pathinfo[$i+1])){
  25. $params[$pathinfo[$i]] = $pathinfo[$i+1];
  26. }
  27. }
  28. // print_r($params);
  29. // 5. 调用控制器方法
  30. $mycontroller = new $controller();
  31. echo $mycontroller->$action(...array_values($params));

效果图:

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