博主信息
博文 32
粉丝 2
评论 0
访问量 37769
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
实现一个简单的URL到控制器方法的映射
简行
原创
1970人浏览过

一.实现一个简单的URL到控制器方法的映射

1.index.php:一些URL参数的获取及操作

  1. <?php
  2. // http://myphp.edu/0805/index.php/demo/getinfo?p=5&name=admin&leve=青铜
  3. echo $_SERVER['PATH_INFO'], '<br>';
  4. echo $_SERVER['REQUEST_URI'], '<br>';
  5. //URL地址有些字符会转义成特殊符号
  6. echo $_SERVER['QUERY_STRING'], '<br>';
  7. echo "<hr>";
  8. echo "将URL地址进行编码:".urlencode($_SERVER['QUERY_STRING']), '<br>';
  9. echo "将URL地址进行解码:".urldecode($_SERVER['QUERY_STRING']), '<br>';
  10. echo "<hr>";
  11. // parse_url(): 解析URL的各个部分,并返回一个数组
  12. print_r(parse_url(urldecode($_SERVER['REQUEST_URI'])));
  13. echo "<hr>";
  14. // pathinfo(): 返回当前脚本的路径信息,以数组方式
  15. print_r(pathinfo(urldecode($_SERVER['REQUEST_URI'])));
  16. echo "<hr>";
  17. //parse_str(): $_SERVER['QUERY_STRING'],将查询字符串以数组的方式返回
  18. parse_str($_SERVER['QUERY_STRING'],$arr);
  19. print_r($arr);
  20. echo "<hr>";
  21. // http_build_query():使用给出的关联(或下标)数组生成一个经过 URL-encode 的请求字符串
  22. echo http_build_query(['name'=>'admin', 'leve'=>'30', 'p'=>6]);


2.index1.php:简单演示

  1. <?php
  2. http://myphp.edu/0805/index1.php/demo/getinfo/p/5/name/admin/leve/青铜
  3. namespace MVCtest;
  4. class DemoController
  5. {
  6. public function getinfo($p,$name,$leve){
  7. return "用户:".$name.",等级:".$leve."当前处于第".$p."页";
  8. }
  9. }
  10. $pathinfo = $_SERVER['PATH_INFO'];
  11. $pathinfo = array_values(array_filter(explode("/",$pathinfo)));
  12. var_dump($pathinfo);
  13. echo "<hr>";
  14. // array_filter():过滤掉空元素,返回数组
  15. // $con = array_filter(explode("/",$pathinfo));
  16. // array_values():将数据键名重置,从0开始,返回数组
  17. // $con=array_values($con);
  18. // array_shift():函数删除(取出)数组中第一个元素,并返回被删除(取出)元素的值
  19. // array_pop():删除(取出)数组中的最后一个元素
  20. // ucfirst():把字符串中的首字符转换为大写。
  21. //综合写法:获取控制器(类名)
  22. $controller = __NAMESPACE__."\\".ucfirst(array_shift($pathinfo))."Controller";
  23. echo $controller,"<hr>";
  24. //方法
  25. $action = array_shift($pathinfo);
  26. echo $action,"<hr>";
  27. //参数
  28. var_dump($pathinfo);
  29. echo"<hr>";
  30. $data = [];
  31. for($i=0;$i <count($pathinfo);$i+=2){
  32. if(isset($pathinfo[$i+1]))
  33. {
  34. $data[$pathinfo[$i]]=$pathinfo[$i+1];
  35. }
  36. }
  37. var_dump($data);
  38. echo"<hr>";
  39. //客户端调用
  40. // 1.直观调用
  41. echo (new $controller())->$action($data['p'],$data['name'],$data['leve']),"<br>";
  42. // 2.常用调用
  43. // call_user_func_array(callable $callback , array $param_arr) : 调用回调函数,并把一个数组参数作为回调函数的参数,把第一个参数作为回调函数(callback)调用,把参数数组作(param_arr)为回调函数的的参数传入。
  44. // call_user_func(参数一):作用与call_user_func_array一样
  45. echo call_user_func_array([(new $controller),$action],$data);

批改老师:天蓬老师天蓬老师

批改状态:合格

老师批语:一个真实的路由比这个复杂得多,但思路是一样的
本博文版权归博主所有,转载请注明地址!如有侵权、违法,请联系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+教程免费学