Back to Main Site

Обзор архитектуры PolyCMS

Last updated on Jun 23, 2026 17:12

PolyCMS спроектирован как расширяемая модульная система управления контентом, построенная на Laravel 12 и Vue 3. Он устраняет разрыв между традиционными монолитными платформами CMS (такими как WordPress) и современными решениями без головы, предлагая гибридную архитектуру с открытым ядром.

1. Стек высокого уровня

Backend Foundation: PHP 8.3+, Laravel 12, PostgreSQL (основной)/MySQL.

Frontend Admin SPA: TypeScript, Vue 3 (Composition API), Vite 7, TailwindCSS 3.2, Pinia.

Уровни API: RESTful API (/api/v1) через Sanctum и конечную точку GraphQL через Nuwave/Lighthouse.

Редактор: Редактор блоков на основе TipTap (хранилище JSON с серверной отрисовкой HTML).

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»)

Фасад Hook, вдохновленный WordPress, но реализованный с помощью современного PHP, позволяет модулям перехватывать выполнение с помощью Actions (обратные вызовы void) и Filters (преобразователи значений).

Действия: Например, Hook::addAction('order.refund.succeeded', [RefundLog::class, 'handle'])

Фильтры: Например, Hook::addFilter('content.render.html', fn($html) => sanitize($html))

B. Двухмодельная архитектура: нативная или песочница

PolyCMS изолирует риски, разделяя модули на два режима работы, определенные в module.json:

  • Надежные собственные модули:

Иметь полный доступ к ядру PHP, файловой системе и базе данных. Загружается изначально через поставщиков услуг. Используйте их для глубокой SEO-оптимизации, кэширования или переопределения ядра.

  • Удаленные приложения для песочницы:

Выполняйте внеполосные действия с помощью политик нулевого доверия. Они взаимодействуют исключительно через API-интерфейсы REST/GraphQL через одобренный администратором токен приложения Sanctum. Используйте их для синхронизации CRM, интеграции Mailchimp или обработки AI.

C. Многотемный движок

В отличие от стандартных приложений Laravel, PolyCMS поддерживает одновременную активацию темы:

Основная тема: Предоставляет глобальный макет app.blade.php и базовые ресурсы.

Подтемы. Предоставляйте специализированные шаблоны блоков (например, шаблон целевой страницы), которые можно назначать отдельным публикациям или продуктам, локально переопределяя основную тему и наследуя глобальный CSS.

4. Управление состоянием SPA администратора

Панель администратора PolyCMS представляет собой одностраничное приложение (SPA). Поток данных следует строгому шаблону:

Маршрутизация: vue-router перехватывает URL-адрес и загружает определенный компонент View.

Состояние. Глобальные состояния пользовательского интерфейса (Темный режим, Активные диалоги, Уведомления) управляются магазинами Pinia.

Связь через API: Компоненты используют перехватчики Axios для автоматического внедрения токенов Sanctum Bearer.

Проверка: Компонент централизованной проверки («useValidation») обеспечивает стандартные компоненты формы («FormField», «FormInput») с динамическим сопоставлением ошибок клиента и сервера.

Следующие шаги

Чтобы начать расширение ядра, просмотрите Жизненный цикл разработки модуля или изучите Справочник по перехватчикам и фильтрам, чтобы увидеть доступные точки расширения.