博客列表 >PHP路由router

PHP路由router

滑稽...
滑稽...原创
2020年05月19日 17:14:40976浏览

路由处理

1.URL处理函数

  1. <?php
  2. // 路由原理
  3. // 目标:将URL中的控制器,方法解析出来,映射到对应的控制器类和方法上
  4. // http://php11.cn/teachPHP/tcdemo/router/demo1.php?action=edit&id=19&name=admin
  5. // 返回一个查询字符串分解的数组
  6. // print_r($_GET);
  7. // echo implode(',', $_GET);
  8. // ?action=edit&id=19&name=admin
  9. //printf('?action=%s&id=%s&name=%s',$_GET['action'],$_GET['id'],$_GET['name']);
  10. //vprintf('?action=%s&id=%s&name=%s',$_GET);
  11. /**
  12. * URL/查询变量/GET变量($_SERVER['QUERY_STRING']): action=edit&id=19&name=admin
  13. */
  14. // echo '查询字符串: ' . $_SERVER['QUERY_STRING'];
  15. // echo '<hr>';
  16. // http:://php.edu/0514/route.php/action/edit/id/19/name/admin
  17. /**
  18. * PATHINFO变量/ 路径变量($_SERVER['PATH_INFO']): /action/edit/id/19/name/admin
  19. */
  20. //echo 'PATHINFO变量: ' . $_SERVER['PATH_INFO'];
  21. //echo '<hr>';
  22. /**
  23. * pathinfo:返回一个关联数组包含有 path 的信息
  24. * Array ( [dirname] => 0514 [basename] => route.php [extension] => php [filename] => route )
  25. */
  26. // print_r(pathinfo('0514/route.php'));
  27. /**
  28. * 取得当前度URL的路径地址 :/teachPHP/tcdemo/router/demo1.php/action/edit/id/19/name/admin
  29. */
  30. // http:://php.edu/0514/route.php/控制器/方法/参数1/值1/参数2/值2/....
  31. //echo 'http://php.edu' . $_SERVER['REQUEST_URI'];
  32. //echo '<hr>';

2.get传参处理

  1. <?php
  2. //测试地址http://php11.cn/teachPHP/tcdemo/router/demo1.php/user/getuser?id=19&name=admin
  3. //控制器
  4. class UserController
  5. {
  6. public function getUser($id,$name)
  7. {
  8. return "id=> $id , name => $name";
  9. }
  10. }
  11. //1.解析出pathinfo
  12. $pathinfo = array_values(array_filter(explode('/',$_SERVER['PATH_INFO'])));
  13. //2.解析控制器
  14. $controller = ucfirst(array_shift($pathinfo)) . 'Controller';
  15. //3.解析控制器中的方法
  16. $action = array_shift($pathinfo);
  17. // 4. 解析参数 parse_str — 将字符串解析成多个变量
  18. parse_str($_SERVER['QUERY_STRING'], $params);
  19. // 5. 调用控制器方法
  20. $user = new $controller();
  21. echo $user->$action(...array_values($params));// 5. 调用控制器方法

3.”/“传参处理

  1. <?php
  2. // 路由原理
  3. // 目标:将URL中的控制器,方法解析出来,映射到对应的控制器类和方法上
  4. //测试地址
  5. http://php11.cn/teachPHP/tcdemo/router/demo2.php/user/getuser/id/200/name/admin
  6. //控制器
  7. class UserController
  8. {
  9. public function getUser($id,$name)
  10. {
  11. return "id=> $id , name => $name";
  12. }
  13. }
  14. //1.解析出pathinfo
  15. $pathinfo = array_values(array_filter(explode('/',$_SERVER['PATH_INFO'])));
  16. //2.解析控制器
  17. $controller = ucfirst(array_shift($pathinfo)) . 'Controller';
  18. //3.解析控制器中的方法
  19. $action = array_shift($pathinfo);
  20. // 4. 解析参数
  21. // 这里放的是从pathinfo中解析出来的变量组成的数组
  22. $params = [];
  23. for($i = 0;$i<count($pathinfo);$i+=2){
  24. // 检查当前pathinfo变量是否有值?
  25. if(isset($pathinfo[$i+1])){
  26. $params[$pathinfo[$i]] = $pathinfo[$i+1];
  27. }
  28. }
  29. // 5. 调用控制器方法
  30. $user = new $controller();
  31. echo $user->$action(...array_values($params));// 5. 调用控制器方法
声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议