平平博客平平博客
user side
平平
pingping@pingping6.com
平平网络pingping6.com

php路由分发类库框架(前端控制器类库)

网站源码2020-06-19 51  0 
摘要:php路由分发类库框架(前端控制器类库)...

编写起因

    最近在学spring的时候觉得它的前端控制器非常好用,但是php没有独立的路由框架,于是我就写了一个!

版权声明

   本类库为本人原创,希望转载或者复制标明出处,本类库依赖php注解类库驱动(annotation类库),请点击下载

代码文档

方法及说明

+----------------------------------------------------------------------+
作者:平平 
+----------------------------------------------------------------------+
类名:router 
+----------------------------------------------------------------------+
功能:php路由分发类库框架(前端控制器类库)
+----------------------------------------------------------------------+
网站:http://blog.pingping6.com  
+----------------------------------------------------------------------+
邮箱:pingping@pingping6.com 
+----------------------------------------------------------------------+
文档地址:https://api.pingping6.com/api/router/doc.api  
+----------------------------------------------------------------------+  
备注:转载请标明作者,如有BUG请发邮箱指正  
+----------------------------------------------------------------------+  
版权声明:   
本类库为本人原创,希望转载或者复制标明出处,   
如有BUG请联系我指正。
本类库需要伪静态支持,请前往本文底部获取!
本类库依赖php注解类库驱动(annotation类库),请前往文档地址获取!
类库不断更新,请支持正版!   
+----------------------------------------------------------------------+

public function __construct($filePath)
//构造函数,$filePath为配置文件路径

public function config()
//初始化配置,返回配置文件解析数组

public function map()
//初始化map缓存,返回map缓存解析数组

public function updateMap()
//更新map缓存,返回当前对象

public function updateConfig()
//更新配置文件,返回当前对象

public function add($path, $data, $method)
//增加临时路由规则,不会写入配置文件和缓存,优先级最高
//path为路由链接,如:/myinfo
//$data为对应规则,如:m test/test.php/test FunctionName
//$method为http请求类型,为post或get

public function get($path, $data)
//同add方法,$method为get

public function post($path, $data)
//同add方法,$method为post

public function update()
//从配置文件中更新map缓存数据,自动扫描注解配置
//依赖updateMap,updateConfig,map,config方法

public function scanFile()
//扫描配置文件中配置的需扫描的注解文件
//生成map缓存数据
//自动更新map和配置,返回当前对象
 
public function addScan($arr)
//增加临时扫描文件并扫描注解,不会写入配置文件和缓存,优先级最高
//$arr为需扫描的文件及方法或函数
//如:"test/test.php/testFunc",["test/test.class.php/testClass testMethod"]
//返回当前对象

public function scan($con)
//扫描注解文件,生成map缓存数据
//$con为需扫描的文件及方法或函数数组
//如:["test/test.class.php/testClass testMethod"]
//返回缓存索引数组

public function formatPath($arr)
public function formatMethod($arr)
public function formatFilePath($str)
//类方法依赖,返回格式化后的数据

public function router()
//启动路由
//当路由方法为函数时,访问链接将自动调用函数
//当路由方法为类方法时,访问链接将自动实例化类并调用方法
//当路由方法为文件时,访问链接将自动加载文件,若文件中有代码执行其中代码
//若链接有正则匹配则将匹配内容依次赋值给目标参数

public function httpStatus($num)
//网页跳转到对应状态
//$num为状态码,如:404


配置文件规则:

链接路径以/开头,最后不能有/!
文件路径不能以/开头,以网站根目录为基准!
访问已经存在的文件不会拦截!!
scan规则:路径/函数名,文件路径,路径/类名1,类名2,*匹配所有只适用于函数,以为,分割名字,若为文件路径则扫描文件开头注解内容
paths规则:
键:"请求类型 地址"   以英文空格分隔,请求类型为post或get,地址支持正则,正则括号分组内容会依次赋值给目标参数
值:"文件类型 文件地址/名称 方法名"   以英文空格分隔,文件类型为f(函数),m(类及方法),fi(文件)!方法名仅在m时需填写
键值以冒号隔开,如:"post /test":"m test/test.class.php/testClass testMethod","get /test":"f test/test.func.php/testFunc",
default及error规则同paths中值的规则

{
   "url":"/",         //拦截链接,/为所有,如/router,只拦截以/router开头的链接(所有访问链接需加上/router),支持正则
   "scan": [
"test/test.func.php/testFunc",
"test/test.func.php/testFunc,testFunc2",
"test/test.func.php

如:



Apache伪静态:
<IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php [NC,L]
</IfModule>


Nginx伪静态:
location / {
        if (!-e $request_filename)
        {
                rewrite . /index.php last;
        }
}

例子

include 'lib/router.php';
$ob = new router('./config/config.json');
$ob->update(); //更新缓存只需在修改配置后进行,会影响性能,需手动更新
$ob->add('/aa/a', 'fi test/1.php', 'get')->addScan([
   "test/test.php/test"
]);
$ob->router();

文档地址

详细文档地址:http://api.pingping6.com/api/router/doc.api

下载地址

隐藏内容
php路由分发类库框架(前端控制器类库)
请 回复 后查看内容!
继续阅读
标签:前端php源码类库框架路由分发路由分发注解链接url前端控制器
写代码真的很累!麻烦点个赞,评论一下,然后分享给自己的小伙伴!
打赏
海报分享
发表评论
表情
快捷
私密

右滑验证