Back to Main Site

PolyCMS 架构概述

Last updated on Jun 23, 2026 07:54

PolyCMS 被设计为一个高度可扩展的模块化内容管理系统,构建在 Laravel 12Vue 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)通过动态客户端/服务器错误映射为标准表单组件(FormFieldFormInput)提供支持。

后续步骤

要开始扩展核心,请查看模块开发生命周期或浏览挂钩和过滤器参考以查看可用的扩展点。