phpframe-project / phpframe
A modern PHP 8.1+ framework with FPM/CLI/Shell modes support
0.1.0
2026-06-15 14:40 UTC
Requires
- php: ^8.1
- ext-json: *
- ext-pdo: *
- guzzlehttp/guzzle: ^7.0
- illuminate/cache: ^10.0
- illuminate/database: ^10.0
- illuminate/encryption: ^10.49
- illuminate/events: ^10.0
- illuminate/filesystem: ^10.0
- illuminate/hashing: ^10.0
- illuminate/pagination: ^10.0
- illuminate/redis: ^10.0
- monolog/monolog: ^3.0
- nikic/fast-route: ^1.3
- phpoption/phpoption: ^1.9
- predis/predis: ^2.0
- react/child-process: ^0.6.6
- react/event-loop: ^1.0
- react/http: ^1.0
- react/socket: ^1.0
- symfony/cache: ^6.0
- symfony/var-dumper: ^6.4
- twig/twig: ^3.0
- vlucas/phpdotenv: ^5.5
Requires (Dev)
- mockery/mockery: ^1.5
- phpunit/phpunit: ^10.0
Suggests
None
Provides
None
Conflicts
None
Replaces
None
This package is not auto-updated.
Last update: 2026-10-20 15:25:50 UTC
README
PHPFrame 是一个支持 FPM / CLI(ReactPHP 常驻内存)/ Shell 三模式的 PHP 框架,提供统一的控制器、路由、中间件、数据库、缓存、日志等核心能力。
特性
- 三模式统一:FPM、CLI(ReactPHP)、Shell 共享同一套路由和控制器体系
- 中间件管道:洋葱模型的中间件机制,支持全局中间件和路由级中间件
- 请求解耦:Request 对象可脱离超全局变量独立使用,便于单元测试
- 依赖注入容器:支持单例和原型服务、循环依赖检测、自动依赖解析
- 数据库抽象:基于 Illuminate Database,支持查询缓存委托给 CacheManager
- Monolog 日志:统一使用 Monolog,支持
Log::info()静态调用和管道格式请求日志,自动按日期轮转 - 多 Worker 进程:CLI 模式支持 pcntl_fork 多进程,自动监控和重启,PID 文件实时更新
- 环境感知配置:自动扫描 config 目录,支持
app.production.php环境覆盖(深度覆盖而非递归合并) - 统一异常处理:内置 ExceptionHandler,可自定义覆盖
- Fiber 并发:基于 PHP Fiber 的 Task 类,支持并发、竞速(自动取消未完成 Fiber)、定时器等
- 门面系统:
Log::info()、Db::table()、Cache::get()等静态调用风格,各门面上下文独立隔离
核心概念
中间件
use PHPFrame\Facades\Route; use App\Middleware\AuthMiddleware; use App\Middleware\CorsMiddleware; // 全局中间件 Route::middleware(new CorsMiddleware()); // 路由级中间件 Route::registerMiddleware('auth', new AuthMiddleware()); Route::handlerMiddleware('App\Controllers\UserController@profile', ['auth']);
中间件通过
Route门面注册时采用延迟机制:先暂存到内部队列,待RouteManager创建后由框架自动统一应用。开发者无需关心RouteManager的初始化时机。
依赖注入
// 单例服务(默认) app()->set('cache', function ($c) { return new CacheManager($c->get('repository')); }); // 原型服务(每次解析返回新实例) app()->prototype('request', function ($c) { return Request::createFromGlobals(); }); // 循环依赖检测(自动抛出异常) // A → B → A 会抛出 "Circular dependency detected: A → B → A"
配置覆盖
// config/app.php return ['debug' => true, 'name' => 'myapp']; // config/app.production.php(深度覆盖,同名键用后者覆盖前者) return ['debug' => false]; // 结果: ['debug' => false, 'name' => 'myapp']
重定向
// FPM 模式:设置 Location header 后返回,不再强制 exit return $this->redirect('/login', 302); // 中间件的后置逻辑仍会正常执行
文档
| 模块 | 文档 |
|---|---|
| 安装与项目结构 | installation.md |
| 配置管理 | configuration.md |
| 容器与应用 | container.md |
| 路由系统 | routing.md |
| 中间件 | middleware.md |
| 请求处理 | request.md |
| 响应处理 | response.md |
| 数据库 | database.md |
| 缓存 | cache.md |
| 日志系统 | logger.md |
| 门面系统 | facades.md |
| 常驻服务器 | server.md |
| 异常处理 | exceptions.md |
| 辅助函数 | helpers.md |
| 请求隔离 | request-isolation.md |
| 异步任务 | task.md |
环境要求
- PHP >= 8.1
- ext-pcntl(多 Worker 模式需要)
- ext-redis(Redis 缓存驱动需要)
- Composer 2.x
License
MIT