来自博客:上帝的尾巴,原文链接
提交给了github。 路由组件代码。 代码的质量一般。 看看: )
组件的想法
现在是单入口,在index.php中配置组件,并调用组件dispatch中指定的控制器。
此外,该框架充当后端的纯Api框架。 没有PHP模板引擎,与前端的所有数据交换都通过json (推荐)或xml进行。 所以要支持跨域,还必须支持rest风格的请求。
目前实现的一些特性
自动调用控制器并处理请求。
专门用于分析参数的Param工具类。
有解析器FormData、Json,PHP不处理PUT请求的参数,添加解析器工具类,处理前端发送的数据。 包括对上载文件的分析(可以设置为临时文件,直接获取文件内容并将其放置在相对较小的文件中)。
当前博客是用这个组件编写的,代码也在github上。
还有需要完善的地方(这几天抽时间解决) )。
自定义路由:添加正则匹配。
例如`/article/:id `,自动放置整数并将其设置为参数id。
[
' url'='/article/:id ',
' filter'=[
' id'='/d /'
]
#'controller'='Article@detail '
' real'='/article/detail/:id '
]
实现流程
composer.json配置
{
' name': 'godtail/router ',
' description': 'Easy router,no config,support RESTFul.',
'许可证' : ' MIT ',
' require': {
' php': '=5.3.3'
(,
' autoload': {
' PSR-4 ' : { ' god tail\ router' : './src ' }
}
}
所需的配置
' deep'=2,#控制器层数
' default'=['Index ',' index'],#默认,自动完成
' namespacePre'='Service\ ',#控制器名称空间前缀
' classSuffix'='Service ',#控制器类名的后缀
' crossDomain'=[ #跨域设置]
' allowOrigin'='http://test.net ',
' maxAge'='86400 ',
' headers'='Content-Type ',
' methods'='OPTIONS,GET,PUT,POST,DELETE ',
]
如何获得更好的URL风格
在nginx rewrite中,rewrite为index.php指定不匹配的url? /$uri。
位置/{
try_files $uri $uri//index.php? /$uri;
}
这样godtail.cn/index.php? 如果写/article/tag,就可以写godtail.cn/article/tag。
路由和URL参数解析
用于设定路由为几层的config的deep参数,功能比较简单的话可以分为2层,分为module的话可以分为3层。
获取URL,根据/分割。
例如` deep=2`,` godtail.cn/article/tag/page/2 `,page设置为Params。
Params:包含用于存储所请求参数的静态变量$data。
提供get、set、parse方法。
公式数据分析
对于来自POST的请求,PHP可以处理,并设置为$_POST或$_FILES,但对于PUT请求,必须自行处理php://input数据流。
格式数据格式
------- boundary---------[ '---- ' boundary ]
name=1
内容类型=xxxx
[换行]
数据内容1
------- boundary---------[ '---- ' boundary ]
name=2
内容类型=xxxx
[换行]
数据内容2
--------boundary------------[最后一个'----'boundary'----']
当前,如果设置了saveFile,则按正则进行分析处理。 使用tempnam生成临时文件。
启用
#设定构成
router :3360 config $ config [ ' router ' ];
#分布
Router:dispatch (;