php 简单路由实现
2019独角兽企业重金招聘Python工程师标准>>>
在PHP中,利用单一入口文件实现路径的访问,实现形如 http://localhost/project/index.php/module/method/param_key/param_val 的访问路由
module:模块名称(类)
method:模块方法
param_key:参数名称
param_val:参数值
一、新建项目 route
在 route 下新 index.php,代码如下
<?php error_reporting(0); define(DIR_CONTROLLER, 'controller/'); // 定义控制器目录date_default_timezone_set("Asia/Shanghai"); $_DocumentPath = $_SERVER['DOCUMENT_ROOT']; $_RequestUri = $_SERVER['REQUEST_URI']; $_UrlPath = $_RequestUri; $_FilePath = __FILE__; $_AppPath = str_replace($_DocumentPath, '', $_FilePath); //==>\route\index.php $_AppPathArr = explode(DIRECTORY_SEPARATOR, $_AppPath); for ($i = 0; $i < count($_AppPathArr); $i++) { $p = $_AppPathArr[$i]; if ($p) { $_UrlPath = preg_replace('/^\/'.$p.'\//', '/', $_UrlPath, 1); } } $_UrlPath = preg_replace('/^\//', '', $_UrlPath, 1); $_AppPathArr = explode("/", $_UrlPath); $_AppPathArr_Count = count($_AppPathArr); $arr_url = array( 'controller' => 'Index', 'method' => 'index', 'parms' => array() ); $arr_url['controller'] = ucfirst($_AppPathArr[0]); // 模块名称,首字母转为大写$arr_url['method'] = $_AppPathArr[1]; // 获取参数if ($_AppPathArr_Count > 2 and $_AppPathArr_Count % 2 != 0) { //die('参数错误'); } else { for ($i = 2; $i < $_AppPathArr_Count; $i+=2) { $arr_temp_hash = array(strtolower($_AppPathArr[$i])=>$_AppPathArr[$i + 1]); $arr_url['parms'] = array_merge($arr_url['parms'], $arr_temp_hash); } } $module_name = $arr_url['controller']; $module_file = DIR_CONTROLLER.$module_name.'.class.php'; $method_name = $arr_url['method']; if (file_exists($module_file)) { include $module_file; $obj_module = new $module_name(); if (!method_exists($obj_module, $method_name)) { die("要调用的方法不存在"); } else { if (is_callable(array($obj_module, $method_name))) { $obj_module -> $method_name($arr_url['parms']); } } } else { die("定义的模块不存在"); }
?>
二、在项目目录下新建 controller 文件夹,并在该文件夹下新建 Welcome.class.php 文件,代码如下
<?php class Welcome{public function index($param){echo 'Hello World!';}}
?>
三、地址栏输入 http://localhost/route/index.php/welcome/index/
页面输出 “ Hello World! ”
转载于:https://my.oschina.net/u/3460260/blog/1832005
php 简单路由实现相关推荐
- Android—简单路由框架实践
简单路由框架实现: 1.目录结构 annotation和factory-compiler是两个java library,分别负责接口还有APT. 2.依赖关系 app作为主工程依赖所有 impleme ...
- centos 重启网卡_CentOS6 网络管理之网卡配置及简单路由设置
CentOS6中关于网络配置的命令有很多,本文将介绍几个平时最长用的几个命令,以及网卡IP地址的配置和简单路由配置. 1.经常使用的查看IP地址命令为 ifconfig,不跟参数的情况下默认查看所有已 ...
- SpringCloud 微服务网关Gateway介绍及简单路由配置
概述:什么是微服务网关?为了解决用户客户端在调用微服务系统中的多个消费者工程接口时,需要维护非常多的消费者应用接口地址等信息,以及可能存在不同应用见的调用跨域等问题,微服务网关组件随即出现.网关作为用 ...
- Express简单路由使用
Express简单路由使用
- include 路由 php,PHP简单路由
define('BASE_PATH', dirname(__FILE__).DIRECTORY_SEPARATOR);//系统根目录 define('MODULE_PATH', BASE_PATH.' ...
- linux之用route命令看简单路由信息
1.我们在linux上简单看路由信息使用下面命令 route -n
- Spring Cloud Gateway –配置简单路由
可以将Spring Cloud Gateway视为Spring Cloud Netflix Zuul项目的后续产品,并有助于在微服务环境中实现Gateway模式 . 它建立在 Spring Boot ...
- Javascript实现前端简单路由
http://www.helloweba.com/view-blog-385.html WEB开发中路由概念并不陌生,我们接触到的有前端路由和后端路由.后端路由在很多框架中是一个重要的模块,如Thin ...
- 计算机网络学习1:packet tracer的简单路由设置(学习记录)
一:目标. 用packet tracer 构建简单的网络,理解IP协议. 二:步骤. 1.路由连接. 2.router0设置. 3.router1设置. 4.pc0 ping router0. 5.p ...
最新文章
- SQL基础---增删查询操作
- 云计算情报局预告|告别 Kafka Streams,让轻量级流处理更加简单
- RS(纠删码)技术浅析及Python实现
- 在VNC远程桌面环境Xfce4中Tab键失效的解决方法
- spoj 2 Prime Generator
- 考研山东省的计算机学校有哪些,山东考研哪个学校好考
- (转)配置Spring管理的bean的作用域
- sql server 分区_使用分区归档SQL Server数据
- leetcode(153)寻找旋转排序数组中的最小值
- Npm更新移除包的规则
- mysql 通过ssh通道安全连接数据库
- 一个好用的用于前端的字体图标库
- svn拉取文件合并_svn 创建分支、合并分支、分支与分支合并
- 用python来开发webgame服务端(2)
- Proxmox VE 配置桌面虚拟化
- 二级c语言笔试试题及答案,1996年9月全国计算机等级考试二级C语言笔试试题及答案...
- Ouroboros:A Provably Secure Proof-of-Stake Blockchain Protocol 学习总结
- 成功解决RecursionError: maximum recursion depth exceeded
- 2021-金三银四跳槽-还愿
- windows批处理命令教程
热门文章
- Latent dirichlet allocation note
- 矩阵分析与多元统计11 广义vec算子与devec算子
- UA MATH575B 数值分析下III 图像恢复
- Java虚拟机new和newarray相关指令学习
- 超图使用服务管理页面发布服务图解
- Netbeans学习总结
- 百度地图API开发概述
- JSP标准标签库JSTL总结
- Communications link failure
- 2.CCGridAction(3D效果),3D反转特效,凸透镜特效,液体特效,3D翻页特效,水波纹特效,3D晃动的特效,扭曲旋转特效,波动特效,3D波动特效...