Blogger Information
Blog 9
fans 1
comment 0
visits 7000
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
PHP路由router
滑稽...
Original
971 people have browsed it

路由处理

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. 调用控制器方法
Correcting teacher:天蓬老师天蓬老师

Correction status:unqualified

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