php后端路由,API后端框架Godtail2-路由组件

来自博客:神的尾巴,原文链接

已提交到github,路由组件代码,代码质量一般,大家将就着看 : )

组件思路

现在都是单入口,通过index.php配置组件,然后通过组件dispatch,来调用指定的控制器。

另外这个框架作为后端纯Api框架。没有PHP模板引擎,所有与前端的数据交互都通过json(推荐)或xml。所以要支持跨域,也要支持RESTFul风格的请求。

当前实现了的一些特性

自动调用控制器,处理请求。

专门解析参数的Param工具类。

PHP不处理PUT请求过来的参数,添加Parser工具类,有解析器FormData,Json,用来处理前端发过来的数据。包含上传文件的解析(设置到临时文件,对于比较小的文件直接获取文件内容,可以自己配置)。

当前博客就是用这个组件写的,代码也在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.",

"license": "MIT",

"require": {

"php": ">=5.3.3"

},

"autoload": {

"psr-4": {"Godtail\\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,把匹配不到的url,rewrite为index.php?/$uri。

location / {

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方法。

FormData的解析

如果通过POST过来的请求,PHP能够处理,设置到$_POST或者$_FILES,但是如果是PUT请求,则需要自己处理php://input数据流。

FormData的格式

------boundary--------['--'+boundary]

name=1

content-type=xxxx

[换行]

数据内容1

------boundary--------['--'+boundary]

name=2

content-type=xxxx

[换行]

数据内容2

------boundary---------[最后一个'--'+boundary+'-']

目前是通过正则来解析处理的,如果设置了saveFile。使用tempnam生成临时文件。

启用

#设置配置

Router::config($config['router']);

#dispatch

Router::dispatch();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值