php框架 路由_PHP框架开发之Route路由简单实现
参数Laravel路由的使用方式,来效仿一个简单的路由实现方式class Route
{
/**
* @var $_instance // 实例
*/
private static $_instance = null;
/**
* @var $_currentPath // 当前URL中的地址
*/
private $_currentPath = '';
/**
* @var $_prefix // URL地址中前缀
*/
private $_prefix = '';
private function __construct($currentPath)
{
$this->_currentPath = $currentPath;
}
// 通过静态方法来进行Route路由实例化
static function getInstance($currentPath)
{
if( is_null(self::$_instance) ){
self::$_instance = new self($currentPath);
}
return self::$_instance;
}
/**
* 实现GET请求的路由访问
*
* @param string $path //访问路由规则(路径)
* @param Closure $callback 匿名回调函数
*
* @return Route
*/
public function get($path,\Closure $callback)
{
if( !empty($this->_prefix) ){
$path = '/'.$this->_prefix.$path;
}
if( $path == $this->_currentPath ){
echo $callback();
exit;
}
return $this;
}
/**
* 实现路由前缀设定
*
* @param string $prefix //访问路由前缀(路径)
*
* @return Route
*/
public function prefix($prefix)
{
$this->_prefix = $prefix;
return $this;
}
/**
* 实现路由分组
*
* @param Closure $callback 路由组的具体实现
*
* @return Route
*/
public function group(\Closure $callback)
{
$callback($this);
return $this;
}
}
调用示例:// 通过GET中s参数模拟路由规则的访问
$currentPath = empty($_GET['s']) ? '/index/index' : $_GET['s'];
$route = Route::getInstance($currentPath);
// 实现流程:
// 1.判断当前访问的URL地址是否被设定
// 2.如果被设定则执行get方法中的$callback匿名函数
$route->get('/aaaa',function(){
return 'Route Http Get Called';
});
$route->get('/bbbb',function(){
return 'Route Http Get Called 2';
});
// 实现流程:
// 1.设定URL地址前缀:test
// 2.将路由前缀和get的路径规则进行拼接
// 3.执行group方法中$callback匿名函数
// 4.判断当前访问的URL地址是否符合设定的路径规则
// 5.如果被设定则执行get方法中的$callback匿名函数
$route->prefix('test')->group(function($route){
$route->get('/aaaa',function(){
return 'Route Group Http Get Called';
});
});
以上只是个实现思路,欢迎互相探讨交流!
php框架 路由_PHP框架开发之Route路由简单实现相关推荐
- Android监听作用,Android开发之CheckBox的简单使用与监听功能示例
本文实例讲述了Android开发之CheckBox的简单使用与监听功能.分享给大家供大家参考,具体如下: activity_main.xml android:layout_width="ma ...
- Swift Web 开发之 Vapor - 路由(二)
上篇文章带大家基本了解了一下开始一个 Vapor 项目的流程,本篇紧接着来说说在所有 Web 框架中都最关键的 "路由",因为 "路由" 模块在 Web 项目中 ...
- Swift Web 开发之 Vapor - 路由(二) 1
上篇文章带大家基本了解了一下开始一个 Vapor 项目的流程,本篇紧接着来说说在所有 Web 框架中都最关键的 "路由",因为 "路由" 模块在 Web 项目中 ...
- 网站开发之DIV+CSS简单布局网站入门篇(五)
这篇文章主要介绍如何使用DIV和CSS简单布局一个网站的首页,通常将网站划分为顶部(Logo.导航条).中部(页面主要内容.左右栏目).底部(制作方介绍.超链接).这是非常基础的一篇引入性文章,采用案 ...
- Android API开发之TTS开发之Android TTS简单使用
Android提供了自动朗读支持.可以对指定文本内容进行朗读,从而发生声音:还允许把文本对应的音频录制成音频文件,保存到本地,方便以后播放.Android的自动朗读主要通过TextToSpeec ...
- android网游开发之socket的简单设计和实现
对于普通应用的网络模块一般使用http文本协议,在android开发中使用http协议比较简单,sdk已经做了很好的封装了.而在游戏开发中,可以结合使用http和socket,当然了http协议底层也 ...
- JSP开发之JSP连接数据库简单实例
首先嘞,咱们这里有一个需要下载的jar文件: mysql-connector-java-5.1.39-bin.jar 完事之后嘞,把它放到 tomcat 下 lib 目录里,然后我们就可以来开始尝试连 ...
- Python开发之pandas行和列的获取
Python开发之pandas行和列的获取 0 1. 行和列的获取 1.1 根据索引获取行 1.2 根据条件获取行 1.3 获取列 2 区域选取 2.1 df.loc[] 2.1.1 行选取 2.1. ...
- iOS开发之AVKit框架使用
2019独角兽企业重金招聘Python工程师标准>>> iOS开发之AVKit框架使用 一.引言 在iOS开发框架中,AVKit是一个非常上层,偏应用的框架,它是基于AVFounda ...
最新文章
- linux下如何修改根口令
- linux内核态real cred,Linux内核实验报告——实验5.doc
- org.xml.sax.SAXParseException; lineNumber: 11; columnNumber: 285; cvc-elt.1.a: 找不到元素 ‘beans‘ 的声明。
- uos安装方法_国产UOS(统一操作系统),虚拟机安装体验
- 高德软件有限公司python试题 及 答案
- 尤克里里怎么样_尤克里里入门简单教程
- 你竟是这样的月饼-今年中秋节折腾的月饼2.0
- 软件测试系统并发数,“并发用户数”、“系统用户数”和“同时在线用户数”之间的差别...
- JavaScript = TypeScript 入门
- Roslyn 静态分析
- 设计师经常逛的色彩搭配网站—配色方案吧
- ROS学习笔记之——MAC安装ubuntu虚拟机
- 树莓派的Python成功解决TypeError: Image data cannot be converted to float
- 如何更好地理解中间件和洋葱模型
- 人脸识别签到考勤系统毕业设计,人脸识别考勤系统设计与实现,人脸识别系统论文毕设作品参考
- FIR内插滤波器结构与代码实现
- 01背包经典例题详解
- 电子商务中数据分析的八大指标体系
- 手机测试软件 lg g5,LG G5评测:系统功能初体验
- 学习新概念英语3及以后
热门文章
- 分形之城:递归超典型例题,还没明白?手把手画给你看!
- android触摸事件触摸点坐标,Android开发——触摸事件TouchEvent详解及其应用
- 翻译 Windows Server 2016和System Center 2016 技术预览版4 使创新更容易
- mysql setautocommit_MySql 中的setAutoCommit方法
- tnsname.ora 个参数解释
- 对于以太网口作为下一条路由的理解
- 易混单词 expect VS except
- 河流逻辑结构图生成方法
- Cocos Creator 你不知道的细节
- [Serializable]在C#中的作用——实现.NET对象序列化