添加前台页面
新增前台页面通常需要三步:注册路由、添加控制器方法、创建主题模板。
$router->add('GET', '/faq', [SiteController::class, 'faq']);public function faq(): void
{
$this->renderSite('faq', [
'seo' => [
'title' => 'FAQ',
'description' => 'Frequently asked questions'
]
]);
}<?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 模块,可以按这个步骤拆分:
- 写迁移创建
faqs表。 - 创建
Faq模型。 - 在
SiteController添加前台 FAQ 页面。 - 在
AdminController添加 FAQ 管理。 - 在
app/views/admin/faqs/添加列表和表单。 - 在
app/routes.php注册前后台路由。 - 在权限映射中添加
faqs模块。 - 在主题中创建
faq.php模板。 - 在菜单管理中添加 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->exec('DROP TABLE IF EXISTS faqs');
}
};