文档站点(左菜单 + 右内容)
mtphp 自带一个用框架自身搭建的文档站点,演示“调用简单、功能主流”的理念:左侧目录菜单,右侧正文,当前首页内容直接作为文档序言。
22.1 路由
Route::get('/docs', [DocController::class, 'index']); // 序言(复用首页欢迎内容)
Route::get('/docs/{slug}', [DocController::class, 'show']); // 章节(slug 为章节编号 1~21)
访问 http://你的域名/docs 即可进入;点击左侧菜单的任意章节进入对应正文,章节底部带“上一节 / 下一节”导航。
22.2 实现要点
- 文档源即手册:站点直接读取根目录的
使用手册.md,按二级标题(##)切分为章节,左侧菜单与正文都从这里自动生成——手册与网站永远同源、无需额外同步。 - Markdown 渲染:
mtphp/Markdown/Markdown.php是一个零依赖的 Markdown → HTML 渲染器,覆盖本手册所需语法子集(标题 / 段落 / 有序无序列表 / 引用 / 分隔线 / 围栏代码块 / 表格 / 行内代码 / 加粗 / 斜体 / 链接),默认对正文转义防 XSS。 - 控制器:
app/Controllers/DocController.php的index()渲染序言、show($slug)解析章节并 Markdown 渲染,未找到章节返回 404。 - 解析结果缓存(性能):整本手册的“章节切分”与“单章节 Markdown 渲染 HTML”都按手册
mtime记忆化到runtime/cache,避免每个请求重复切分近 4 万字符并重新渲染;手册文件一保存(mtime变化)即自动失效重解析。 - 布局与视图:
app/Views/docs/layout.tpl:文档布局(顶部品牌栏 + 左侧菜单 + 右侧正文 + 版权页脚),复用框架指令@extends/@yield/@foreach/@class(当前项高亮)。app/Views/docs/preface.tpl:序言页,继承布局,复用首页欢迎内容。app/Views/docs/page.tpl:章节页,用{!! $content !!}输出渲染后的 HTML。
文档站点本身也是一份“活样例”:它证明了用 mtphp 几行代码就能搭出一个带侧边导航的文档站,且模板引擎、路由、Markdown 渲染全部开箱即用。