Back to Main Site

模块开发:入门

Last updated on Jun 23, 2026 17:17

PolyCMS 的真正力量在于其模块化。模块(有时称为插件)允许您扩展 CMS 的核心功能、添加新的 API 端点、创建自定义管理界面或与第三方服务集成 - 所有这些都无需触及任何核心代码。

本指南将引导您完成第一个模块的搭建。

1.目录结构

所有模块必须放置在 PolyCMS 安装根目录的 modules/ 目录中。它们遵循“Vendor/ModuleName”命名空间约定。

让我们创建一个由供应商“Polyx”创建的名为“BlogEnhancer”的模块。

modules/
└── Polyx/
    └── BlogEnhancer/
        ├── module.json          # The Module Manifest
        └── src/
            └── BlogEnhancerServiceProvider.php

2. 模块清单 (module.json)

每个模块必须在其根目录中有一个 module.json 文件。核心“ModuleManager”解析此文件以发现模块,注册其 PSR-4 自动加载命名空间,并启动其服务提供程序。

创建“modules/Polyx/BlogEnhancer/module.json”:

{
  "name": "BlogEnhancer",
  "vendor": "Polyx",
  "version": "1.0.0",
  "description": "Adds extra features and SEO tools to the core blog.",
  "provider": "Modules\\Polyx\\BlogEnhancer\\BlogEnhancerServiceProvider",
  "autoload": {
    "psr-4": {
      "Modules\\Polyx\\BlogEnhancer\\": "src/"
    }
  },
  "sandbox": false
}

3. 受信任的本机与沙盒远程

请注意上面清单中的 "sandbox": false 键。 PolyCMS 实现了双模型架构:

Trusted Native (sandbox: false): 该模块在 Laravel 核心内本地执行。它可以直接访问数据库、文件系统,并且可以通过服务提供商更改渲染规则。将此用于深度系统集成(如缓存、备份模块或复杂的支付网关)。

Sandbox Remote (sandbox: true): 零信任执行模型。该模块位于带外,仅使用管理员批准的 Sanctum 令牌通过“/api/v1”或“/graphql”端点进行通信。将此用于第 3 方集成(例如 Mailchimp 同步、CRM 连接器或 AI 生成)。

在本教程中,我们正在构建一个 Trusted Native 模块。

4. 服务提供商

服务提供者是 PHP 代码的入口点。您可以在此处注册路由、绑定单例并挂钩核心事件。

创建 modules/Polyx/BlogEnhancer/src/BlogEnhancerServiceProvider.php

<?php

declare(strict_types=1);

namespace Modules\Polyx\BlogEnhancer;

use Illuminate\Support\ServiceProvider;
use App\Facades\Hook;

class BlogEnhancerServiceProvider extends ServiceProvider
{
    public function register(): void
    {
        // Bind classes into the service container
    }

    public function boot(): void
    {
        // 1. Load routes (if you have them)
        // $this->loadRoutesFrom(__DIR__ . '/routes/api.php');

        // 2. Load Views (if you have them)
        // $this->loadViewsFrom(__DIR__ . '/../resources/views', 'blog-enhancer');

        // 3. Register Hooks
        $this->registerHooks();
    }

    private function registerHooks(): void
    {
        // Example: Add a custom menu item to the Admin panel
        Hook::addAction('admin.menu.build', function ($menuRegistry) {
            $menuRegistry->addChild('content', [
                'key' => 'blog_enhancer_tools',
                'label' => 'SEO Tools',
                'url' => '/admin/blog-enhancer',
                'icon' => 'SparklesIcon',
                'order' => 90
            ]);
        });
    }
}

5. 启用模块

现在您的脚手架已完成,请登录 PolyCMS 管理面板并导航至 设置 > 模块

您应该会看到列出的“BlogEnhancer”模块。单击启用

核心系统将重新加载,并且因为我们连接到“admin.menu.build”,您将立即看到新的“SEO工具”链接出现在内容部分下的侧边栏中!

后续步骤

现在您的模块正在启动,您可以通过以下方式扩展它:

创建自定义管理 Vue 组件

注册新的 API 端点

通过 Widget System 注入 UI