codecamp

扩展库:可重用的扩展类库

PhalApi框架扩展类库

-- 致力于与开源项目一起提供企业级的解决方案!

此部分类库为 PhalAPi框架 下的扩展类库包,各个扩展包各自独立,可以根据需要自动下载安装。

虽然此部分的扩展很多都是基于已有的第三方开源实现,或者开发同学自己实现分享的,但我们所做的不只是代码的搬运工,更多的是在系统架构上的组件库重用,以及在此引入 防腐层 ,避免进入 供应商锁定(Vendor Lock-In) 

除此之外,可以在PhalApi框架的基础上,快速引入符合我们国内实际项目开发需要的各种扩展。如时,您会发现,原来编程本来就是一件如此简单的事情,就像搭积木一样。

正如我们一直推荐的:

接口,从简单开始!

目前已提供的扩展类库 - 针对使用者

1、微信开发

此扩展可用于微信的服务号、订阅号、设备号等功能开发,则PhalApi框架下简单配置即可开发使用。

更多请点这里查看使用文档

2、代理模式下phprpc协议的轻松支持

此扩展可用于phprpc协议的调用,服务端只需要简单添加入口即可完美切换。

更多请点这里查看使用文档

3、基于PHPMailer的邮件发送

此扩展可用于发送邮件。

更多请点这里查看使用文档

4、优酷开放平台接口调用

此扩展可用于调用优酷开放平台的接口。

更多请点这里查看使用文档

5、七牛云存储接口调用

此扩展可以用于将图片上传到七牛CDN,或者其他七牛接口的调用。

更多请点这里查看使用文档

6、用户、会话和第三方登录集成

此类库主要特点有:

  • 1、可以和第三方登录集成,包括:微信登录、新浪登录、QQ登录
  • 2、为客户端提供了直接可以调用的登录接口
  • 3、为服务端提供了直接可以检测用户登录态的操作
  • 4、支持token落地、高效缓存和分布式的数据库存储
  • 5、展示了如何开发一个项目级的类库、包括数据库配置、翻译等

    更多请点这里查看使用文档

7、swoole支持下的长链接和异步任务实现

目前,此扩展类库提供了:

8、新型计划任务

此扩展类型用于后台计划任务的调度,主要功能点有:

  • 1、提供了Redis/文件/数据库三种MQ队列
  • 2、提供了本地和远程两种调度方式
  • 3、以接口的形式实现计划任务

更多请点这里查看使用文档

9、Auth 权限扩展 (由@黄苗笋提供)

实现了基于用户与组的权限认证功能,与RBAC权限认证类似,主要用于对服务级别的功能进行权限控制,主要功能点有:

  • 1、提供了接口服务维度的权限验证
  • 2、提供了可配置的组与规则
  • 3、支持免检用户

更多请点这里查看使用文档

11、FastRoute快速路由

此扩展基于 FastRoute 实现,需要 PHP 5.4.0 及以上版本,可以通过配置实现自定义路由配置,从而轻松映射到PhalApi中的service接口服务。,主要有:

  • 1、基于FastRoute实现
  • 2、需要PHP 5.4.0 及以上版本
  • 3、通过配置文件来实现自定义路由,并映射到service
  • 4、可兼容无路由的历史URI

    更多请点这里查看使用文档

12、基于PhalApi的DB集群拓展DB_Cluster (由@喵了个咪提供)

为应对海量数据分析与统计,提供针对分表分库统一封装的数据库操作接口,主要用于解决大量数据写入分析的问题。请注意:V0.1bate版本,很多功能尚不完善,只提供技术交流使用,请不要用于生产环境。主要特点有:

13、基于PhalApi的Redis_Base拓展 (由@喵了个咪提供)

主要提供更丰富的Redis操作,并且进行了分库处理可以自由搭配

扩展开发指南 - 针对开发者

为了统一扩展类库的风格、便于用户更容易使用,这里建议:

  • 代码:统一放置在Library目录下,各扩展包各自一个目录,尽量Lite.php入口类,遵循PEAR包命名规范;
  • 配置:统一放置在DI()->config->get('app.扩展包名')中,避免配置冲突;
  • 文档:统一提供WIKI文件对扩展类库的功能、安装和配置、使用示例以及运行效果进行说明;

1.19.4 从微架构到扩展类库的演进

在应用项目的实际开发,我们也可以有意识地将一些通用的工具和操作与业务分离,以便可以在项目内更好地重用。当抽离成工具或者通用类后,则可以进一步推广到公司内其他项目,即组件复用。如果觉得可以,则发扬开源精神,分享给社区。这也是符合从微架构到应用构架、系统架构、乃至企业架构的演进之路。

定制化:资源服务的再实现
约定编程:架构明显的编程风格
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

八、视频教程

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }