资讯专栏INFORMATION COLUMN

API后端框架Godtail2-路由组件

summerpxy / 701人阅读

摘要:另外这个框架作为后端纯框架。当前博客就是用这个组件写的,代码也在上。还需完善的一些地方近几天抽空解决下自定义路由添加正则匹配。的格式换行数据内容换行数据内容最后一个目前是通过正则来解析处理的,如果设置了。使用生成临时文件。

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

已提交到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": {"GodtailRouter": "./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,把匹配不到的urlrewriteindex.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();

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/22011.html

相关文章

  • EggBorn.js:一款顶级Javascript全栈开发框架

    摘要:是什么是一款顶级全栈开发框架。渐进式开发由于模块的高度内聚,可以将业务以模块的形式沉淀,在多个项目中重复使用,既可贡献到开源社区,也可部署到公司内部私有仓库。模块发布当项目中的模块代码稳定后,可以将模块公开发布,贡献到开源社区。 EggBorn.js是什么 EggBorn.js是一款顶级Javascript全栈开发框架。 EggBorn.js是采用Javascript进行全栈开发的最佳...

    dayday_up 评论0 收藏0
  • 构建前端项目

    摘要:解决思路服务器端渲染服务器端和前端公用同一个应用,然后通过构建工具及配置,确定哪些组件需要再服务器端渲染,那些组件需要再客户端渲染。服务器端渲染,由框架与构建工具配合,并依据一定的项目结构和编码方式,共同运行。 分离 为什么需要 前后端分离、web服务器与static服务器分离: 前端与后端耦合 (需求) 自动化、工程化的构建前端的代码 (基础条件) 模块化、组件化,项目共享代码 (...

    mindwind 评论0 收藏0
  • SPA那点事

    摘要:单页面应用的出现依然存在着争议性,我们该如何看待他的两面性呢接下来小生给大家总结一下他的优缺点。单页面应用的优势无刷新体验没有了令人诟病的页面频繁刷新,同时节约浏览器资源,路由响应比较及时,提升了用户的体验。 前端猿一天不学习就没饭吃了,后端猿三天不学习仍旧有白米饭摆于桌前。IT行业的快速发展一直在推动着前端技术栈在不断地更新换代,前端的发展成了互联网时代的一个缩影。而单页面应用的发展...

    PumpkinDylan 评论0 收藏0
  • SPA那点事

    摘要:单页面应用的出现依然存在着争议性,我们该如何看待他的两面性呢接下来小生给大家总结一下他的优缺点。单页面应用的优势无刷新体验没有了令人诟病的页面频繁刷新,同时节约浏览器资源,路由响应比较及时,提升了用户的体验。 前端猿一天不学习就没饭吃了,后端猿三天不学习仍旧有白米饭摆于桌前。IT行业的快速发展一直在推动着前端技术栈在不断地更新换代,前端的发展成了互联网时代的一个缩影。而单页面应用的发展...

    Lsnsh 评论0 收藏0

发表评论

0条评论

summerpxy

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<