PHP轻量框架分享

背景说明

  • 近期需要将之前功能较复杂的后台服务模块拆成小模块,该模块采用了前人开发的基于MVC的php自研框架,框架本身集成了较多功能,包括接口参数统一校验、异构数据库接口抽象封装等
  • 由于历史悠久且缺乏文档说明,随着需求与版本迭代,代码结构变得比较混乱,维护成本随之增加
  • 由于框架本身的设计限制,无法支持新版本PHP(如5.6)的部分特性,引入一些新的概念与技术变得困难
  • 新模块功能相对比较简单,不需要集成较多特性

框架介绍

主要特性

  • 协议可定制(推荐json)
  • 引入ORM,不需要自己封装DB基础操作
  • 配置文件使用YAML格式,可读性较高
  • 适合搭建后台简单服务
  • 方便与常见web server集成(推荐nginx)

框架结构

调用内部调用关系图

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
common # 公共目录
|- Constants.php # 常量
|- Errors.php # 错误码与错误信息
|- ...
configs # 配置目录
|- db.yaml # 数据库配置
|- log.yaml # 日志配置
|- ...
models # 模型目录
|- ...
services # 服务目录
|- ...
controllers # 控制器目录
|- ...
libraries # 库目录
|- Configuration.php # 配置解析类
|- HttpRequest.php # HTTP处理类
|- DbConnection.php # DB处理类
|- Log.php # 日志处理类
|- ...
logs # 日志目录
|- ...
scripts # 离线脚本目录
|- ...
tests # 测试目录
|- controllers # 控制器测试目录
|- ...
|- services # 服务测试目录
|- ...
|- models # 模型测试目录
|- ...
|- ...
vendor # 包管理目录
|- ...
composer.lock # composer锁文件
composer.json # composer配置文件
phpunit.xml # PHP单元测试配置文件
index.php # 请求入口类

目录与文件说明

  • index.php: 请求入口文件,负责解析请求包,选择合适接口处理请求,组装返回包
  • common: 存放项目公共文件,如常量、错误码与错误信息等
  • configs: 存放项目配置文件,如数据库配置、日志配置、业务配置等
  • models: 每个数据表对应一个文件,每个文件封装了对应数据表的ORM操作(依赖illuminate/database包)
  • services: 每一类服务对应一个文件,每个文件封装了针对一个或多个ORM的操作,需要在这一层处理事务
  • controllers: 存放接口文件,每个文件对应一个外部调用接口,需要在这一层做好接口参数校验
  • libraries: 存放项目库文件,如日志操作、数据库操作、配置解析等
  • scriptes: 存放所有离线脚本
  • tests: 存放所有测试类
  • phpunit.xml: 单元测试配置文件,用于执行tests目录下的测试类
  • logs: 存放所有日志文件
  • vendor: 存放所有项目依赖的包
  • composer.json: 包管理配置文件
  • composer.lock: 包管理操作锁

示例项目