灯塔 CMS 开发文档

功能开发

添加前台页面、后台模块以及 FAQ 扩展示例。

适用版本:1.3.4更新日期:2026-10-12

添加前台页面

新增前台页面通常需要三步:注册路由、添加控制器方法、创建主题模板。

app/routes.php
$router->add('GET', '/faq', [SiteController::class, 'faq']);
SiteController.php
public function faq(): void
{
    $this->renderSite('faq', [
        'seo' => [
            'title' => 'FAQ',
            'description' => 'Frequently asked questions'
        ]
    ]);
}
themes/default/faq.php
<?php include __DIR__ . '/header.php'; ?>
<main class="container mx-auto px-4 py-12">
    <h1><?= h($seo['title'] ?? 'FAQ') ?></h1>
</main>
<?php include __DIR__ . '/footer.php'; ?>

扩展原则:

  • 路由只负责声明路径和控制器。
  • 控制器负责组装数据,不直接输出 HTML。
  • 模板负责展示,所有动态文本使用 h() 转义。
  • 需要后台可编辑的文案应放入主题 blocks.php。

添加后台功能

后台功能通常涉及路由、控制器、视图、权限和导航。

1. app/routes.php 注册 /admin/example 路由
2. AdminController 增加方法
3. 方法开头执行登录和权限检查
4. app/views/admin/example/index.php 创建视图
5. 如需数据表,先写迁移和模型
6. 在后台导航或权限映射里加入模块

后台扩展要求:

  • POST 请求必须带 CSRF。
  • 员工可访问模块必须经过权限判断。
  • 表单错误要有明确提示。
  • 批量删除、更新、上传等操作要做输入校验。
  • 不要在视图里写复杂 SQL。

扩展示例:FAQ 模块

如果要添加 FAQ 模块,可以按这个步骤拆分:

  1. 写迁移创建 faqs 表。
  2. 创建 Faq 模型。
  3. 在 SiteController 添加前台 FAQ 页面。
  4. 在 AdminController 添加 FAQ 管理。
  5. 在 app/views/admin/faqs/ 添加列表和表单。
  6. 在 app/routes.php 注册前后台路由。
  7. 在权限映射中添加 faqs 模块。
  8. 在主题中创建 faq.php 模板。
  9. 在菜单管理中添加 FAQ 页面链接。

最小迁移示例:

return new class {
    public function up(SQLite3 $db): void
    {
        $db->exec('CREATE TABLE IF NOT EXISTS faqs (
            id INTEGER PRIMARY KEY AUTOINCREMENT,
            question TEXT NOT NULL,
            answer TEXT NOT NULL,
            status TEXT NOT NULL DEFAULT "published",
            sort_order INTEGER DEFAULT 0,
            created_at TEXT NOT NULL,
            updated_at TEXT NOT NULL
        )');
        $db->exec('CREATE INDEX IF NOT EXISTS idx_faqs_status_sort ON faqs(status, sort_order)');
    }
public function down(SQLite3 $db): void
{
    $db-&gt;exec('DROP TABLE IF EXISTS faqs');
}

};