Skip to content

夕梦 SunsetReverie轻量 PHP 微服务框架

多 API 域隔离 · 组件可替换 · 无 ORM
为「一个人维护的中型后端」而设计

夕梦

零运行时依赖

核心 56 个文件 + 10 个组件,只用 PHP 内置能力。部署不需要 Composer,不需要 vendor 目录。

多 API 域

域 → 版本 → 路由三层隔离,token 不跨域。四个端共用一套领域服务,不用复制四份 controller。

组件可替换

缓存 4 种驱动、数据库 3 种、图片 2 种、邮件 2 种,全部基于接口而非继承。

看得见 SQL

没有 ORM。Query Builder 写出来就是一条可读的 SQL,N+1 在写的时候就看得见。

契约优先

39 条错误码,HTTP 状态与业务码一一对应。异常按语义分类,生产环境自动脱敏。

可验证

349 个用例 · PHPStan level 8 · 架构检查 8 项 · 三版本 × 三数据库实测。

它长什么样 ​

php
// routes/web.php
Route::get('/posts', [PostController::class, 'index'], 'post.index')
    ->middleware(['auth.optional']);
php
// 控制器只做参数转换
final class PostController
{
    public function __construct(private readonly PostService $posts)
    {
    }

    public function index(Request $request): array
    {
        return $this->posts->paginate(
            page: $request->page(),
            perPage: $request->perPage(),
        );
    }
}
php
// 领域服务写真正的规则
final class PostService
{
    public function __construct(private readonly Connection $db)
    {
    }

    public function paginate(int $page, int $perPage): array
    {
        $query = DB::table('posts')->where('status', 1);

        return [
            'items' => $query->orderBy('published_at', 'desc')
                ->limit($perPage)
                ->offset(($page - 1) * $perPage)
                ->get(),
            'total' => $query->count(),
        ];
    }
}

什么时候适合用它 ​

适合不适合
多端共存的业务后端(PC / App / 小程序 / 后台)需要庞大生态和现成轮子的项目
团队规模小、希望少一层魔法团队已熟悉某个主流框架且有大量积累
部署环境受限(不能装 Composer)需要重量级 ORM 与复杂关联关系的系统
想随时能读懂每一行执行路径需要内置管理后台、CMS 等开箱即用功能

当前状态 ​

v1.0 · 夕照

日落时分的第一束稳定光 —— 核心可用,生产就绪。

功能完整、可用于生产试用,但 API 仍可能微调。若发现设计问题会发新的 beta 而不是升大版本。 精确版本号见顶部导航栏(从 Application::VERSION 自动读取)。

项结果
测试349 用例 / 916 断言
静态分析PHPStan level 8 零错误
架构检查8 项全过
覆盖率core(除 CLI)83.2% · components 75.6%
PHP 版本8.3.36 · 8.4.27 · 8.5.2 三版本全过
数据库MySQL 8 · PostgreSQL 18 · SQLite 3

下一步 ​

以 MIT 许可发布 · v1.0 夕照