php中router路由设置,Router - 一个 PHP 的微型路由控制器

Router 是用户 @lloyd_zhou 自己写的一个 PHP 的微型路由控制器,正如项目介绍所说

A barebones router for PHP. It matches urls and executes PHP functions. automatic get variable based on handler function parameter list.

下面详细介绍一下这个工具。以下是作者原文。

之前使用dispatch,但是从 4.0 到现在的 8.0 API 变动比较大,特别是在最近两次大的版本的升级,为了保持代码简洁丢失了向下兼容的特性。

感觉作者的的核心思想不是很坚定。所以生出了自己造轮子的冲动。

这个是一个微型的可以在 openresty 里面运行的路由控制器,曾经帮作者做了一次重大改版,现在还是这个项目第二贡献者。

其中的思想是很值得借鉴的:

1. 使用树形结构来保存 url 和 handler 的映射关系。(按照树形结构查找保证了查找回调函数的效率 Olog(n),而传统的以正则表达式做 key 映射 handler 方式,查找回调函数时间不稳定,最坏情况需要执行一遍所有的正则表达式)

2. 将 reqest method 定义成是 match 函数的一个封装形式。便于提供方便的形式来映射路由。

鉴于以上两个非常好的特性,所以就把这个 lua 的库在 PHP 下面重写了一遍。同时在写的过程中加入了一些新的特性:

1. 增加 error 这个 API,一个 API 提供两种调用方式(这个借鉴了 dispatch 里面的一些特性,有点像 jQuery 的某些方法),可以兼具定义 error handler 和触发 error handler 的作用。

2. 增加 hook API,同样有两种调用方式。

3. 默认触发“before”和“after”两个 hook。分别在执行真正的 handler 前后。

4. 在“before”这个 hook 后面执行用户自定义的 hook,这些 hook 是在定义回调函数的时候一起给定当前 url 需要调用的 hook 列表。(当然这些 hook 全部都要用户自己定义回调函数)

安装

这个微型的路由控制器已经提交到 packagist 网站,可以通过 composer 工具安装

composer require lloydzhou/router

启动服务

php -S 0.0.0.0:8888 test.php

性能

使用树形结构来保存 url 和 handler 的映射关系。查找 URL 映射函数的时候保证了查找回调函数的效率 O(log n)。

而传统的以正则表达式做 key 映射 handler 方式,查找回调函数时间不稳定,最坏情况需要执行一遍所有的正则表达式。

DEMO

为了一边测试,一边完善这个库。所以使用这个库结合另外一个ActiveRecord和MicroTpl写了一个简单的博客,里面基本涵盖了这几个库的 API。

[ 全文完 ]

专业的开发者技术社区

多样化线上知识交流

丰富线下活动和给力工作机会

0818b9ca8b590ca3270a3433284dd417.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值