Обзор архитектуры PolyCMS
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») с динамическим сопоставлением ошибок клиента и сервера.
Следующие шаги
Чтобы начать расширение ядра, просмотрите Жизненный цикл разработки модуля или изучите Справочник по перехватчикам и фильтрам, чтобы увидеть доступные точки расширения.