PHP路由原理剖析,用最少的代码实现一个简易路由

2022-10-11 21:12:36 143 0
魁首哥

第一步,定义一个路由类,并且实现__callStatic,这是一个魔术方法,如果你不清楚这个函数的作用,请到php的官方网站查看手册,这里就不讲了。图中可以看到我定义了3个数组,分别保存路由定义时的路由规则,请求方法和 回调函数 。__callStatic只是简单的将对应的项压进对应的数组

php代码

第二步,定义一个dispatch 静态方法 ,函数名可以随便起,parse_url的用法参考 php 官方手册。基本思路是,1.获取访问的url 的pathinfo部分。2.获取访问方法。3.判断路由是否有定义。4.如果有定义就执行闭包否则输出404。

php代码

第三步,接下来就可以用了,定义一个config目录,在目录下定义一个routes.php文件。参考下图,引入上面完成的路由类,定义路由和闭包,调用dispatch方法

routes.php

入口文件只需引入上面定义的routes.php文件即可

index.php

整个项目的目录结构就是这样

目录结构

在浏览器访问效果,成功调用了刚才定义的方法

浏览器

404

为了让服务器知道我们访问的不是真实路径下的文件,需要开启伪静态,看下面

.htaccess( Apache )

RewriteEngine On
RewriteBase /
# Allow any files or directories that exist to be displayed directly
 RewriteCond  %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
 RewriteRule  ^(.*)$ index.php?$1 [QSA,L] 

.htaccess( Nginx )

rewrite ^/(.*)/$ /$1 redirect;
if (!-e $request_filename){
rewrite ^(.*)$ /index.php break;
} 

就这样一个简单路由就完成了,尽管还有很多可以完善的地方,比如调用控制器的方法和参数传入。只能下次分享了

php7

收藏
分享
海报
0 条评论
143
上一篇:干货:几个必备的PHP功能开发 下一篇:小程序开发之PHP环境搭建篇(Windows Server 2016+宝塔)

本站已关闭游客评论,请登录或者注册后再评论吧~

忘记密码?

图形验证码