PolyCMS 架构概述
PolyCMS 被设计为一个高度可扩展的模块化内容管理系统,构建在 Laravel 12 和 Vue 3 上。它通过提供混合开放核心架构,弥合了传统整体 CMS 平台(如 WordPress)和现代 Headless 解决方案之间的差距。
1. 高级堆栈
后端基础: PHP 8.3+、Laravel 12、PostgreSQL(主要)/ MySQL。
前端管理 SPA: TypeScript、Vue 3(组合 API)、Vite 7、TailwindCSS 3.2、Pinia。
API 层: 通过 Sanctum 的 RESTful API (/api/v1) 和通过 Nuwave/Lighthouse 的 GraphQL 端点。
编辑器: 基于 TipTap 的块编辑器(具有服务器端 HTML 渲染的 JSON 存储)。
2. 目录和层分离
PolyCMS 强制执行严格的关注点分离,从“胖控制器”转向强大的服务和面向操作的架构。
app/
├── Actions/ # Single-responsibility execution classes (e.g., CreatePost, ProcessRefund)
├── GraphQL/ # Schema-first resolvers, Queries, and Mutations
├── Http/
│ ├── Api/V1/ # REST Controllers handling HTTP Request/Response cycles
│ └── Frontend/ # Controllers for standard Blade template rendering
├── Models/ # Eloquent ORM definitions
├── Services/ # Core Domain logic (OrderManager, HookManager, MediaService)
└── Providers/ # Core bootstrapping
3. 核心可扩展性引擎
PolyCMS 的强大之处在于它能够在不改变核心代码库的情况下进行扩展。
A. 钩子和过滤器系统(HookManager)
受 WordPress 启发,但使用现代 PHP 实现,“Hook”外观允许模块通过“Actions”(无效回调)和“Filters”(值转换器)拦截执行。
操作: 例如,Hook::addAction('order.refund.succeeded', [RefundLog::class, 'handle'])
过滤器: 例如,Hook::addFilter('content.render.html', fn($html) => sanitize($html))
B. 双模型架构:本机 vs 沙盒
PolyCMS 通过将模块分类为“module.json”中定义的两种操作模式来隔离风险:
- 受信任的本机模块:
拥有对 PHP 核心、文件系统和数据库的完全访问权限。通过服务提供商本地启动。使用它们进行深度 SEO 优化、缓存或核心覆盖。
- 沙盒远程应用程序:
使用零信任策略执行带外操作。他们纯粹通过 REST/GraphQL API 通过管理员批准的 Sanctum 应用令牌进行交互。将它们用于 CRM 同步、Mailchimp 集成或 AI 处理。
C. 多主题引擎
与标准 Laravel 应用程序不同,PolyCMS 支持并发主题激活:
主题: 提供全局 app.blade.php 布局和基础资源。
子主题: 提供可以分配给单个帖子或产品的专用块模板(例如,登陆页面模板),在继承全局 CSS 的同时在本地覆盖主主题。
4. Admin SPA 状态管理
PolyCMS 管理面板是一个单页应用程序 (SPA)。数据流遵循严格的模式:
路由: vue-router 拦截 URL 并加载特定的 View 组件。
状态: 全局 UI 状态(深色模式、活动对话框、通知)由 Pinia 商店管理。
API 通信: 组件利用 Axios 拦截器自动注入 Sanctum Bearer 令牌。
验证: 集中式验证可组合项(useValidation)通过动态客户端/服务器错误映射为标准表单组件(FormField、FormInput)提供支持。