网站首页 > 精选教程 正文
路由的作用的是什么?其实路由就相当于一个指路人。它统一了网站的入口,只访问index.php文件。并让不同的url都可以找到它们的目的地 (也就是执行相应的控制器方法或者闭包)。平时用的倒是不少,但它是怎么实现的了? 接下来我将实现一个功能比较简单的路由类
第一步,定义一个路由类,并且实现__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
猜你喜欢
- 2024-10-25 如何在香港云服务器上优化网站性能?
- 2024-10-25 Wordpress+Nginx代理部署实战 nginx代理swagger
- 2024-10-25 访问虚拟机(Ubuntu)上wordpress网站 可以打开网页无法加载图片
- 2024-10-25 做谷歌seo如何确保网站的速度快? 谷歌seo视频教程
- 2024-10-25 蓝易云 - 常见HTTP状态码的错误有哪些?对应的解决方案是什么?
- 2024-10-25 警惕你服务器的htaccess文件 服务器中
- 2024-10-25 IT程序员的高效编程,这是给你的「开发者的工具箱」
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- nginx反向代理 (57)
- nginx日志 (56)
- nginx限制ip访问 (62)
- mac安装nginx (55)
- java和mysql (59)
- java中final (62)
- win10安装java (72)
- java启动参数 (64)
- java链表反转 (64)
- 字符串反转java (72)
- java逻辑运算符 (59)
- java 请求url (65)
- java信号量 (57)
- java定义枚举 (59)
- java字符串压缩 (56)
- java中的反射 (59)
- java 三维数组 (55)
- java插入排序 (68)
- java线程的状态 (62)
- java异步调用 (55)
- java中的异常处理 (62)
- java锁机制 (54)
- java静态内部类 (55)
- java怎么添加图片 (60)
- java 权限框架 (55)
本文暂时没有评论,来添加一个吧(●'◡'●)