本站创建于 2017 年已经提供了 6 年完全免费的服务,开发不易,请 遵守以下规定 !
使用本站API请在贵站:首页(或 用到本站API的页面 )显眼 处用 超链接 链接到本站(或用 显眼字体 标出 本站名及链接 )!
否则本站 有权利 随时 禁止 贵站的使用!
例如:蓝奏云直链下载接口由<a href="http://api.setbug.com">平平免费API</a>提供
例如:本站接口由平平免费API提供(api.setbug.com)
00 : 32 : 42
+----------------------------------------------------------------------+ 作者:平平 +----------------------------------------------------------------------+ 类名:router +----------------------------------------------------------------------+ 功能:php注解路由分发框架router(前端控制器) +----------------------------------------------------------------------+ 网站:http://blog.setbug.com +----------------------------------------------------------------------+ 邮箱:ping@setbug.com +----------------------------------------------------------------------+ 文档地址:http://api.setbug.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() //启动路由 //当路由方法为函数时,访问链接将自动调用函数 //当路由方法为类方法时,访问链接将自动实例化类并调用方法 //当路由方法为文件时,访问链接将自动加载文件,若文件中有代码执行其中代码 //若链接有正则匹配则将匹配内容依次赋值给目标参数 //返回http状态码,或函数执行结果 public function httpStatus($num) //网页跳转到对应状态 //$num为状态码,如:404 例子 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(); 配置文件规则: 链接路径以/开头,最后不能有/! 文件路径不能以/开头,以网站根目录为基准! 访问已经存在的文件不会拦截!! 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/*", "test/test.class.php/testClass,Class2", ], //需要扫描注解的文件数组,类需指定名字,函数可为*所有,以,分割 "paths": { "get /test":"f test/test.func.php/testFunc", "get /test2/(\d)":"f test/test.func.php/testFunc2", "post /test":"m test/test.class.php/testClass testMethod", }, //路径对应规则,支持正则,正则括号分组内容会赋值给目标参数 "default": "f test/default.php/default", //默认文档,填写后404状态会失效 "error": { "404":"fi 404.php" } //错误文档对应规则 } 注解规则: 配置后无需写对应规则,只需在配置文件中配置扫描路径,若类也注解了path则访问路径为:/类路径/方法路径 /** * @router path='路径' method='请求类型' */ 如: /** * @router path='/getList/(\d+?)' method='post' */ Apache伪静态:RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [NC,L] Nginx伪静态: location / { if (!-e $request_filename) { rewrite . /index.php last; } }