Module hoạt động
Module hoạt động
Danh mục source và trạng thái runtime là hai khái niệm khác nhau. Source hiện có 40 module trong cms/*/module.json, nhưng mỗi dự án có thể bật một tập module khác nhau.
Luồng dữ liệu thực tế
- Admin gọi
GET /api/v2/admin/utilities/modulesqua hàmgetModules(). - Backend đọc danh sách module từ
nwidart/laravel-modules, rồi trảname,alias,description,enabled,requires,providersvà thông tin dependency. fetchAndCacheActiveModules()lưu tên module đang bật, status theo tên/alias và cờ catalog đã tải vàolocalStorage.- Menu và extension kiểm tra đúng tên module owner trước khi render.
Hai kiểu kiểm tra
| Hàm | Mặc định khi catalog chưa tải | Dùng cho |
|---|---|---|
isModuleActive(name) | Fail open | Menu/điều khiển tùy chọn cần giảm lỗi ở first paint |
isModuleExtensionAllowed(name) | Fail closed | Panel hoặc content block do module riêng sở hữu, không được rò sang dự án khác |
Không dùng isModuleActive() cho extension nhạy với boundary module nếu contract yêu cầu fail closed.
Khai báo module trên điều hướng
Route/menu do module sở hữu đặt tên module backend thật trong navigation-config.js:
{
name: 'game-authority-runs',
module: 'GameRun',
}
Một nhóm menu có thể gồm nhiều module khác nhau. Ví dụ shell Game hiện dùng các owner:
| Mục điều hướng | Module backend |
|---|---|
| Authority dashboard | GameAdmin |
| Runs | GameRun |
| Players | GamePlayer |
| LiveOps, mission, shop, game data | GameLiveOps |
| Leaderboard | GameLeaderboard |
| Marketplace | GameMarketplace |
Không khai báo module: 'Game': backend không có module tên Game.
Các nhóm phổ biến khác dùng owner chuẩn như Content, Product, Ecommerce, RealEstate, Education, Inventory, DigitalLibrary, Widget, CivicDirectory và CatholicHandbook.
API composable
import { useActiveModules } from '@/hooks/useActiveModules'
const {
activeModules,
activeModuleStatusMap,
activeModuleCatalogLoaded,
isModuleActive,
isModuleExtensionAllowed,
fetchAndCacheActiveModules,
} = useActiveModules()
await fetchAndCacheActiveModules()
isModuleActive('Education')
isModuleActive('education')
isModuleExtensionAllowed('GuuXeContentPipeline')
Tên được chuẩn hóa không phân biệt hoa/thường. Status map nhận cả name và alias từ backend.
Endpoint backend
GET /api/v2/admin/utilities/modules
PUT /api/v2/admin/utilities/modules/{module}/status
Endpoint danh sách trả metadata phục vụ màn Kích hoạt module. Endpoint cập nhật trạng thái:
- không cho tắt
Core; - kiểm tra dependency còn thiếu khi bật;
- kiểm tra dependent đang hoạt động khi tắt;
- có thể trả conflict nếu module cần maintenance/cleanup trước khi tắt;
- vẫn chịu auth và permission của admin API.
Không bật/tắt theo phỏng đoán
Trước khi đổi trạng thái, đọc missing_dependencies, blocking_dependents, can_disable và thông báo lỗi từ backend. Không sửa trực tiếp modules_statuses.json từ tài liệu vận hành.
Nguồn code
base-admin/src/hooks/useActiveModules.jsbase-admin/src/libs/module.jsbase-admin/src/config/admin-modules.jsispa-cms/cms/Core/routes/api.phpispa-cms/cms/Core/app/Http/Controllers/V2/Admin/ModuleController.php

