PHPackages                             pureisle/micro-mvc - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Framework](/categories/framework)
4. /
5. pureisle/micro-mvc

ActiveLibrary[Framework](/categories/framework)

pureisle/micro-mvc
==================

simple、efficient、 easy to project migration, DMVC+C architecture design, only for PHP 7.0+

1.5.26(6y ago)191014MITPHPPHP &gt;=7.0.0

Since Mar 22Pushed 5y ago3 watchersCompare

[ Source](https://github.com/pureisle/MicroMVC)[ Packagist](https://packagist.org/packages/pureisle/micro-mvc)[ Docs](https://github.com/pureisle/MicroMVC)[ RSS](/packages/pureisle-micro-mvc/feed)WikiDiscussions master Synced 2d ago

READMEChangelog (7)Dependencies (1)Versions (10)Used By (0)

### 为什么用

[](#为什么用)

- 不过度设计，简单、清晰、好用。经历过国内一线互联网公司众多项目实践，能很好的解决大部分业务研发过程中遇到的团队协作、项目管理、质量和安全等问题；
- 提供最简单基础的 MVC 框架，将性能损耗降到最低。[关于性能](https://github.com/pureisle/MicroMVC/blob/master/Framework/docs/performance.md)；
- 支持简单的[Lua MVC](https://github.com/pureisle/MicroMVC/blob/master/Framework/docs/lua_mvc.md) , 需要 Openresty 。
- 按 Module 进行资源分离，以便对业务进行微服务化隔离或后期的服务便捷迁移。[关于Module和迁移](https://github.com/pureisle/MicroMVC/blob/master/Framework/docs/module.md)；
- 提供简单好用的单元测试框架。[关于单元测试](https://github.com/pureisle/MicroMVC/blob/master/Framework/docs/unittest.md)；
- 提供便捷的接口[参数合法性验证](https://github.com/pureisle/MicroMVC/blob/master/Framework/docs/params_check.md)服务，接口合法性调用检测服务，做了基础的防SQL注入、CSRF、XSS等安全防护。[关于安全](https://github.com/pureisle/MicroMVC/blob/master/Framework/docs/secure.md)；
- 提供简单好用工具类，如 [Mysql](https://github.com/pureisle/MicroMVC/blob/master/Framework/docs/controllmysql.md) 、[Curl](https://github.com/pureisle/MicroMVC/blob/master/Framework/docs/curl.md) 、[多进程管理(pcntl)](https://github.com/pureisle/MicroMVC/blob/master/Framework/docs/process_manager.md)、[常驻进程任务监控保活](https://github.com/pureisle/MicroMVC/blob/master/Framework/docs/daemon_monitor.md)等资源的封装、Xhprof 性能优化工具等；
- 根据代码运行的环境自动加载相应的配置文件，方便的切换仿真、生产环境；
- 提供PSR-3规范的日志类，额外提供 log buffer 功能（性能提升） 和 全局日志标记码（一个进程一个标记码，方便定位问题）的功能；
- 所有开发基于 PHP7 环境，未做低版本运行验证和兼容；

#### 框架工具库说明

[](#框架工具库说明)

- [ConfigTool](https://github.com/pureisle/MicroMVC/blob/master/Framework/Libraries/ConfigTool.php) 框架统一的配置文件读取类，限定了配置文件的存放路径，可支持 .php 或 .ini 或 自定义文件的配置读取。
- [Context](https://github.com/pureisle/MicroMVC/blob/master/Framework/Libraries/Context.php) 环境变量类，可以使用全局的 Context::$G ，也可以自定义。主要用于层级较深的参数传递、全局变量存储等。
- [Curl](https://github.com/pureisle/MicroMVC/blob/master/Framework/Libraries/Curl.php) 发起HTTP协议请求的客户端类。
- [MultiCurl](https://github.com/pureisle/MicroMVC/blob/master/Framework/Libraries/MultiCurl.php) 并行批量发起HTTP请求的客户端类。
- [Daemon](https://github.com/pureisle/MicroMVC/blob/master/Framework/Libraries/Daemon.php) CLI模式下任务执行基类，一般配合 bins/run\_daemon.php 或 ProcessManager 使用。
- [DaemonMonitor](https://github.com/pureisle/MicroMVC/blob/master/Framework/Libraries/DaemonMonitor.php) 常驻进程的任务监控类，探测任务文件变化而重启任务、监控任务、超时任务kill、退出的任务重新拉起等。
- [Debug](https://github.com/pureisle/MicroMVC/blob/master/Framework/Libraries/Debug.php) 调试类，可以设置调试信息的输出和禁用。生产环境会强制禁用输出调试信息。
- [Degrader](https://github.com/pureisle/MicroMVC/blob/master/Framework/Libraries/Degrader.php) 降级类，提供三种降级方式：1、按单个Key降级；2、按群组降级；3、按时间范围降级；
- [Exception](https://github.com/pureisle/MicroMVC/blob/master/Framework/Libraries/Exception.php) 异常管理基类，强制按静态数组的方式定义异常，统一管理。
- [KeyBuilder](https://github.com/pureisle/MicroMVC/blob/master/Framework/Libraries/KeyBuilder.php) 强制按一定方式定义和编码KEY值的工具类。
- [PHPFunctionParser](https://github.com/pureisle/MicroMVC/blob/master/Framework/Libraries/PHPFunctionParser.php) 针对PHP代码文件，利用 token\_get\_all 函数进行格式化解析。主要用来做单元测试时，计算测试覆盖率。
- [ProcessManager](https://github.com/pureisle/MicroMVC/blob/master/Framework/Libraries/ProcessManager.php) 多进程管理类，可以控制一批任务执行并监控和记录任务执行过程中的状态、资源利用等。
- [RunTime](https://github.com/pureisle/MicroMVC/blob/master/Framework/Libraries/RunTime.php) 计时器，主要提供了按Key记录运行时间的开始、停止和输出的方法。
- [TestSuite](https://github.com/pureisle/MicroMVC/blob/master/Framework/Libraries/TestSuite.php) 单元测试工具的基类，可以通过 bins/run\_test.php 工具来执行单元测试。
- [UnitTest](https://github.com/pureisle/MicroMVC/blob/master/Framework/Libraries/UnitTest.php) 单元测试控制类，主要提供了单元测试控制的功能。
- [UserAgentParser](https://github.com/pureisle/MicroMVC/blob/master/Framework/Libraries/UserAgentParser.php) UA解析类，主要提供了客户端请求中携带UserAgent的分析方法。
- [Validator](https://github.com/pureisle/MicroMVC/blob/master/Framework/Libraries/Validator.php) 变量或参数合法性检验工具。提供了一些常用的检验方法。
- [Tools](https://github.com/pureisle/MicroMVC/blob/master/Framework/Libraries/Tools.php) 常用工具类
    - [retryAgent](https://github.com/pureisle/MicroMVC/blob/master/Framework/Libraries/Tools.php) 执行重试代理，可以方便的执行一段代码的多次重试。
    - [base64UrlEncode](https://github.com/pureisle/MicroMVC/blob/master/Framework/Libraries/Tools.php) [base64UrlDecode](https://github.com/pureisle/MicroMVC/blob/master/Framework/Libraries/Tools.php) 64进制编解码
    - [getEnv](https://github.com/pureisle/MicroMVC/blob/master/Framework/Libraries/Tools.php) [setEnv](https://github.com/pureisle/MicroMVC/blob/master/Framework/Libraries/Tools.php) 框架内比较重要的一个方法，可以设置代码运行环境标识，用以区分和使用不同的配置文件，方便多环境运行。
    - [iniFuncEnabled](https://github.com/pureisle/MicroMVC/blob/master/Framework/Libraries/Tools.php) 检验ini配置中的函数是否可以使用。
    - [isCli](https://github.com/pureisle/MicroMVC/blob/master/Framework/Libraries/Tools.php) 检查当前代码是否为CLI模式运行。
    - [uniqid](https://github.com/pureisle/MicroMVC/blob/master/Framework/Libraries/Tools.php) 生成指定长度的随机码，伪随机。
    - [网络相关](https://github.com/pureisle/MicroMVC/blob/master/Framework/Libraries/Tools.php)
        - [cidrMatch](https://github.com/pureisle/MicroMVC/blob/master/Framework/Libraries/Tools.php) 检查一个IP是否是在一个指定网络内
        - [getClientIp](https://github.com/pureisle/MicroMVC/blob/master/Framework/Libraries/Tools.php) 获取请求的客户端IP
        - [getServerIp](https://github.com/pureisle/MicroMVC/blob/master/Framework/Libraries/Tools.php) 获取代码运行环境的IP
        - [getHostName](https://github.com/pureisle/MicroMVC/blob/master/Framework/Libraries/Tools.php) 获取代码运行环境的hostname
- \[资源管理\] 一些常用的资源工具
    - [IniParser](https://github.com/pureisle/MicroMVC/blob/master/Framework/Libraries/IniParser.php) INI 格式的配置文件的编码和解码工具。
    - [Logger](https://github.com/pureisle/MicroMVC/blob/master/Framework/Libraries/Logger.php) 日志类，符合PSR-3标准。额外提供进程内唯一标识码，方便一次性排查出一次请求的所有相关日志。
    - [Memcached](https://github.com/pureisle/MicroMVC/blob/master/Framework/Libraries/Memcached.php) Memcached管理类，进行了简单封装，主要目的是强制统一资源配置文件的部署和格式。
    - [ControllCache](https://github.com/pureisle/MicroMVC/blob/master/Framework/Libraries/ControllCache.php) 统一的缓存管理基类，提供了三级缓存，分别为：1、内存缓存；2、本地文件缓存；3、远端缓存（redis、mc）。
    - [ControllMysql](https://github.com/pureisle/MicroMVC/blob/master/Framework/Libraries/ControllMysql.php) SQL语句封装类，可以不写SQL构建数据库查询，同时提供了较为完善的安全防护。
    - [PDOManager](https://github.com/pureisle/MicroMVC/blob/master/Framework/Libraries/PDOManager.php) PDO管理类，强制了资源配置部署和格式；提供了基础方法的封装；
    - [Redis](https://github.com/pureisle/MicroMVC/blob/master/Framework/Libraries/Redis.php) Redis扩展的简单封装，主要是为了强制统一资源配置文件的部署和格式。
- \[设计模式\] 一些常用的设计模式工具
    - [EntityBase](https://github.com/pureisle/MicroMVC/blob/master/Framework/Libraries/EntityBase.php) 实体类基类，提供参数列表限制和参数校验等基础能力。
    - [FiniteState](https://github.com/pureisle/MicroMVC/blob/master/Framework/Libraries/FiniteState.php) 状态机的状态基类，主要是为配合状态机FiniteStateMachine使用。
    - [FiniteStateMachine](https://github.com/pureisle/MicroMVC/blob/master/Framework/Libraries/FiniteStateMachine.php) 状态机管理类，提供状态注册、管理、运行控制等功能，使用样例见[PHPFunctionParser](https://github.com/pureisle/MicroMVC/blob/master/Framework/Libraries/PHPFunctionParser.php)。
    - [HookManager](https://github.com/pureisle/MicroMVC/blob/master/Framework/Libraries/HookManager.php) 钩子管理类，通过配置文件定义钩子，在触发钩子时执行预定义的方法或函数。
    - [SingletonManager](https://github.com/pureisle/MicroMVC/blob/master/Framework/Libraries/SingletonManager.php) 单例工厂，提供了进程内类的统一管理和复用。可以使用全局定义的单例工厂 SingletonManager::$SINGLETON\_POOL，也可以自定义一个单例工厂。

### 快速开始

[](#快速开始)

```
composer create-project pureisle/micro-mvc {project_name}
php bins/create_module.php {module_name}

```

其中{project\_name}替换成目标项目名，{module\_name}替换成目标模块名。

### 文件目录

[](#文件目录)

```
|- Framework	框架
	|- config	框架全局配置
	|- Libraries	框架类库
	|- Entities	数据实体类
	|- Models	框架逻辑
	|- Tests	单元测试
|- public  框架公开访问位置
	|- xhprof(可删除)       性能调优工具前端页面，任何的 Module 的静态文件都应该新建一个同名文件夹存放
	|- index.php 	入口文件
	|- index.lua    lua入口文件
	|- init.lua     lua初始化文件
|- bins
	|- cli.php  命令行入口
	|- create_module.php    创建一个空的Module
	|- run_test.php     单元测试入口
	|- run_daemon.php   后台任务执行入口
	|- lua-releng   lua代码检测工具，方便检测全局变量、变量名等
	|- grpc_php_plugin  grpc的php编译模块
	|- update_framework.sh  框架更新工具
|- Sso(可删除)	样例应用,一个简单的Sso用户单点登录系统
	|- Cache	缓存管理文件
	|- config	应用配置文件（mysql、redis等资源配置；api接口配置等;不能变动）
	|- Controllers	控制器（不能变动）
	|- Daemons  后台进程任务类（不能变动）
	|- Models	业务逻辑类
	|- Data 	数据访问类
	|- Entities 业务实体类
	|- Views	视图文件（不能变动）
	|- Plugins	插件文件
	|- Libraries	类库文件
	|- Tests	单元测试文件（不能变动）
	|- Bootstrap.php 	应用启动初始化文件（不能变动,可以没有）
|- Index(可删除)   默认 Module
|- Xhprof(可删除)  php性能调优工具
|- vendor(可删除)  composer工具包文件夹，不使用的话可以删除

```

文件结构也体现了 ["DMVC+C"](https://github.com/pureisle/MicroMVC/blob/master/Framework/docs/dmvc_c.md) 的分层思想。

- "D" 层为数据层，对应的文件夹为"Data"。该层主要解决数据结构的封装，对上层屏蔽底层的数据结构、存储工具等细节；
- "M" 层为逻辑层，对应的文件夹为"Models"。该层主要解决业务逻辑的封装，对上层屏蔽业务逻辑的细节;
- "C" 层为控制层，对应的文件夹为"Controllers"。该层主要控制相应URL提供哪些服务，根据自身提供的服务引用Model层提供的服务。该层主要负责：安全检验、登录检验、根据接口的目的调用相应 Model、日志记录等;
- "V" 层为视图层，对应文件夹为"Views"。该层主要提供前端页面渲染的代码，主要为HTML代码，夹杂少量JS、CSS等，或作为目前流行的前后端分离设计的前端入口文件等;
- "+C" 层为缓存层，对应的文件夹为"Cache"。该层主要控制缓存相关逻辑。
- "public" 文件夹主要存放静态资源，如图片、JS代码库、CSS表等；

详细的情况可以参见 Sso Module，有更多的使用样例，包括 Cache、config、Bootstrap.php等

### 开始使用

[](#开始使用)

#### MVC框架

[](#mvc框架)

1. 配置 Web Server 服务器重定向到入口文件。Nginx 样例如下：

```
root /data1/www/htdocs/service.movie.weibo.com/public/;
if ( !-f $request_filename ) {
	#这里 /index.php/$1 路径要不要带 public 主要依赖配置的 root 路径是什么
    rewrite "^/(.*)" /index.php/$1 last;
}
#下边是控制静态资源访问路径，可以不要
location ~* .(css|js|img)$ {
    root /data1/www/htdocs/service.movie.weibo.com/public/;
    if (-f $request_filename) {
        expires off;
        break;
    }
}

```

1. 路由解析规则：域名后第一个用'/'分离的部分为 module 名，最后一部分为 action 名，中间部分解析为 controller。如:

```
http://service.movie.weibo.com:8183/demo/demo/a/index?a=test&b=12
Module： Demo
Controller： Demo\Controllers\Demo\A
Action: index
参数: a 和 b

```

这里要注意，url结尾有没有"/"很关键，结尾有"/"意味着 Action 的值会解析成 index 。
样例项目中，访问 sso 地址为：

1. 每个 module 可以有自己的 Bootstrap.php 在自己的根目录里，在框架初始化时会顺序执行'\_init'开头的成员方法。
2. 每个 module 有自己的路由插件在 Plugins 文件夹内，可以在 Bootstrap 类中调用 Dispatcher 类的 registerPlugin 方法进行插件注册。 插件包含routerStartup、routerShutdown、dispatchStartup、dispatchShutdown、preResponse几个部分。分别为:

```
routerStartup ： 路由规则解析前
routerShutdown ：路由规则解析后
dispatchStartup ： 控制器分发前
dispatchShutdown ： 控制器分发后
preResponse ： 页面渲染结果输出前

```

1. 每个 Controller 类必须继承 Framework\\Models\\Controller 。Controller 中的 Action 后缀类成员方法为可以调用的接口。
    每个接口可以定义一个对应的参数合法性检验的静态变量，静态变量名的对应规则为： "全大写的接口名\_PARAM\_RULES"。如 'indexAction' 的参数定义如下:

```
 $INDEX_PARAM_RULES = array(
        'a' => 'requirement', //必须有a参数
        'b' => 'number&max:15&min:10', //b参数如果存在则必须为数字且范围在10-15之间
        'c' => 'timestamp', // c参数若存在则必须为合法时间戳
        'd' => 'enum:a,1,3,5,b,12345' //d参数若存在则必须为枚举项
    );//具体参见 Framework\Libraries\Validator 类的定义

```

1. 每个 Action 若返回结果不为 False ，则会加载相应的 View 视图，视图可以混写 PHP 代码。
    在Action内可以调用 $this-&gt;assign() 方法注册渲染变量。如：$this-&gt;assign(array('text' =&gt; 'Hello,world!'));
    相应的视图加载规则： Controller名\\Action名.phtml。如:

```
http://service.movie.weibo.com:8183/demo/demo/a/index?a=test&b=12
Controller 文件路径： MODULE_ROOT\Controllers\Demo\A.php
View 文件路径：MODULE_ROOT\Views\Demo\A\index.phtml

```

#### 老项目使用MicroMVC框架工具库

[](#老项目使用micromvc框架工具库)

```
require FRAMEWORK_PATH . '/Models/Application.php';
$app = new Framework\Models\Application();
$app->execute('exec_function', $argv);

```

其中 exec\_function 为要执行的函数， $argv 是参数列表,可以不传或为空。

#### 如何进行仿真环境配置文件加载重定向

[](#如何进行仿真环境配置文件加载重定向)

1. 在 config 下创建 {env\_name} 文件夹, {env\_name} 名字任意，'pro' 为保留的关键字，视为生产环境标志。文件夹内的配置文件命名同正式的配置文件名即可;
2. ConfigTool 加载配置文件时，会依次判断静态变量 $\_env 、 $\_COOKIE\['VISIT\_SERVER\_ENV'\] 和 $\_SERVER\['VISIT\_SERVER\_ENV'\]，如有设置环境名，则启用相应环境的配置文件夹下的同名配置文件。
3. \\Framework\\Libraries\\Tools::setEnv(string $env) 可以设置环境名，此时会给 静态变量 $\_env 和 setcookie()。
4. 样例参考 Sso 下的 config\\dev\\database.php 和 config\\database.php ，分别会在仿真环境和生产环境读取。生产环境下，不会重定向到非生产环境的配置文件，Tools::getEnv() 强制返回生产环境标志,以防止cookie伪造。

#### 如何使用接口认证

[](#如何使用接口认证)

- 通过配置文件设置认证方式，安全认证字段主要包括(可以参考Sso\\config\\api\_auth.php)：

    - app\_secret参与的签名验证；需要开启参数use\_sign = true 和设置 app\_secret 值
    - 白名单验证，需要设置 white\_ips , 值的格式为: 10.83,10.222.69.0/27,127.0.0.1,10.210.10,10
    - 请求时间有效性验证，在app\_secret参与验证的基础上增加设置 valid\_time值大于0，则会进行时间验证,该值的单位时间为10s
- 签名相关接收的参数为：

    - app\_key 接口调用方id
    - app\_sign 接口调用方加密后的签名
    - app\_time 如果需要时间有效性验证，则会覆盖占用该参数，接口参数定义不要使用这个参数
- app\_secret 及 时间验证的签名规则：

    1. 参数数组增加签证密钥，如：$params\['app\_secret'\]=$app\_secret，如果需要验证时间，则需增加 $params\['app\_time'\]= intval(time() / 10);
    2. 把参数数组构建为无下标的新数组,如： $tmp = array('param\_a=1','param\_b=stringxxx','app\_secret=xxx')
    3. 对新数组进行按字母生序排序,如： sort($tmp);
    4. 使用字符"&amp;"合并排序后的数组生成字符串,如： $params\_str = implode('&amp;',$tmp);
    5. 使用md5获取哈希值，取前6位，至此获得参数的签名字符串,如： $sign = substr(md5($params\_str), 0, 6);

#### 如何进行性能优化

[](#如何进行性能优化)

1. 在想进行代码优化的开始位置执行以下代码：

```
$lc = new LocalCurl();
$lc->setAction('test', 'http://127.0.0.1/xhprof/xhprof/run');
var_dump($lc->get('test')->body());

```

1. 随后在进程结束后会给出查看程序执行细节profile的链接，点击查看即可。

#### 如何使用框架提供的异常处理服务

[](#如何使用框架提供的异常处理服务)

1. 参考Sso\\Bootstrap.php 初始化函数：

```
 public function _initControllerExceptionHandler(Dispatcher $dispatcher) {
        $dispatcher->registerExceptionHandle('\Framework\Models\ControllerException', function ($exception) {
            ApiDisplay::display(ApiDisplay::PARAM_ERROR_CODE, array($exception->getMessage()));
            return true;
        });
}

```

1. 告诉框架自己想要处理的异常 "\\Framework\\Models\\ControllerException" 以及处理该异常的匿名函数即可。
2. 这里有一点需要注意，匿名函数可以有返回值告诉框架，这个异常是否处理成功，如果返回 false ，则框架认为未处理成功，会继续抛出这个异常。

###  Health Score

31

—

LowBetter than 66% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity17

Limited adoption so far

Community14

Small or concentrated contributor base

Maturity61

Established project with proven stability

 Bus Factor1

Top contributor holds 95.7% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~54 days

Recently: every ~94 days

Total

9

Last Release

2226d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/32b210da6b1a0557ff41dfc8164488ad24b5512326370e1d03eefb75633f6150?d=identicon)[pureisle](/maintainers/pureisle)

---

Top Contributors

[![pureisle](https://avatars.githubusercontent.com/u/3436041?v=4)](https://github.com/pureisle "pureisle (90 commits)")[![zhanghuaqing](https://avatars.githubusercontent.com/u/24447168?v=4)](https://github.com/zhanghuaqing "zhanghuaqing (4 commits)")

---

Tags

luamvcphpframeworkmvcefficient

### Embed Badge

![Health badge](/badges/pureisle-micro-mvc/health.svg)

```
[![Health](https://phpackages.com/badges/pureisle-micro-mvc/health.svg)](https://phpackages.com/packages/pureisle-micro-mvc)
```

###  Alternatives

[sproutcms/cms

Enterprise content management and framework

242.2k4](/packages/sproutcms-cms)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
