博客列表 >简单的URL到控制器方法的映射

简单的URL到控制器方法的映射

零龙
零龙原创
2020年08月17日 05:24:011342浏览

URL到控制器方法的映射


用到的函数

  • $_SERVER[‘PATH_INFO’] 解析访问地址
  • array_filter 获取数组中的空值
  • array_values 将数组从0开始重新排列
  • array_slice 获取数组中的任意值 参数1:数组,参数2:位置,参数3:取出的数量
  • array_shift 取出数组第一个键值
  • array_pop 获取数组最后一个键值
  • ucfirst 将首字母转换大写

示例

  1. <?php
  2. namespace Url;
  3. class MyurlController
  4. {
  5. public function index()
  6. {
  7. return '调用了index方法!';
  8. }
  9. }
  10. // $pathinfo = explode('/',$_SERVER['PATH_INFO']);
  11. // //PATH_INFO取出网址/admin/admin888/action/index用explode转为数组
  12. // $pathinfo = array_filter($pathinfo);
  13. // //array_filter过滤数组中的空值
  14. // $pathinfo = array_values($pathinfo);
  15. // //array_values对数组从0重新排列
  16. $pathinfo = array_values(array_filter(explode('/',$_SERVER['PATH_INFO'])));
  17. // 将网址转换返回一个数组
  18. // $pathinfo = array_pop($pathinfo);
  19. // 取出数组最后一个键值
  20. // $pathinfo =array_slice($pathinfo,-2,1);
  21. //array_slice取出数组中倒数第二键值,参数1:数组,参数2:取出的位置,参数3:取出几个值
  22. // $pathinfo = array_shift($pathinfo);
  23. //取出数组的值
  24. // $pathinfo = ucfirst($pathinfo);
  25. //ucfirst将键值第一个字母转换大写
  26. $pathinfo = ucfirst(array_shift(array_slice($pathinfo,-2,1)));
  27. //取出网址中的myurl将首字母转换大写
  28. $controller = __NAMESPACE__.'\\'.$pathinfo.'Controller';
  29. //取出的网址数组中的值和命名空间作为调用的类(生成解析控制器的类名称)
  30. $action = array_pop(explode('/',$_SERVER['PATH_INFO']));
  31. //取出网址数组中最后一个值,作为调用的方法(生成解析控制器的类方法)
  32. echo (new $controller)->$action();
  33. //使用生成的控制器类名称及方法调用类

示例图:

地址通过url传值

示例:

  1. <?php
  2. namespace Url;
  3. class Myurl
  4. {
  5. public function index($id,$name,$age,$mobile)
  6. {
  7. return '您的ID是:'.$id.'您的用户名是:'.$name.'您的年龄是:'.$age.'您的手机是:'.$mobile;
  8. }
  9. }
  10. $pathinfo = array_values(array_filter(explode('/',$_SERVER['PATH_INFO'])));
  11. $controller = __NAMESPACE__ .'\\'.ucfirst(array_shift($pathinfo));
  12. $action = array_shift($pathinfo);
  13. // print_r($pathinfo);
  14. $params =[];
  15. for($i = 1 ; $i < count($pathinfo);$i+=2)
  16. {
  17. $params[$pathinfo[$i]] = $pathinfo[$i];
  18. }
  19. echo call_user_func_array([(new $controller),$action],$params);、

示例图:

解析Url值

  1. <?php
  2. namespace Url;
  3. class MyurlController
  4. {
  5. public $pathinfoClass;
  6. public $pathinfoMethod;
  7. public $params = [];
  8. public function index($id,$name,$age,$mobile)
  9. {
  10. return 'Url传值无键调用类:用户ID:'.$id.' 用户姓名:'.$name.' 用户年龄:'.$age.' 用户手机:'.$mobile;
  11. }
  12. public function getClass($pathinfo)
  13. {
  14. $this->pathinfoClass = array_shift(array_splice($pathinfo,-2,1));
  15. $this->pathinfoClass = __NAMESPACE__.'\\'. ucfirst($this->pathinfoClass).'Controller';
  16. return $this->pathinfoClass;
  17. }
  18. public function getMethod($pathinfo)
  19. {
  20. $this->pathinfoMethod = array_pop($pathinfo);
  21. return $this->pathinfoMethod;
  22. }
  23. public function getDate($pathinfo)
  24. {
  25. $pathinfo =array_slice($pathinfo,0,4);
  26. for($i = 0 ;$i < count($pathinfo);$i++)
  27. {
  28. $this->params[$pathinfo[$i]] = $pathinfo[$i];
  29. }
  30. return $this->params;
  31. }
  32. }
  33. $pathinfo = array_values(array_filter(explode('/',$_SERVER['PATH_INFO'])));
  34. $pathinfoClass = (new MyurlController)->getClass($pathinfo);
  35. $pathinfoMethod = (new MyurlController)->getMethod($pathinfo);
  36. $params =(new MyurlController)->getDate($pathinfo);
  37. echo call_user_func_array([(new $pathinfoClass),$pathinfoMethod],$params);

示例图:

声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议