Webman本身不是CMS,需自行构建内容建模、路由分发、权限控制和静态资源服务;它无开箱即用的RBAC、版本管理或媒体库,优势在高性能,劣势在功能密度低。

为什么不能直接套用 Laravel Nova 或 WordPress 模式
Webman 没有 artisan make:controller 这类命令生成器,也没有内置的 RBAC 权限中间件、内容版本管理或媒体库模块。它的优势在于请求吞吐能力,劣势在于开箱即用的功能密度。如果你照搬传统 CMS 的目录结构(比如把 app/controller/Admin/PostController.php 和 app/view/admin/post/edit.blade.php 直接搬进来),很快会遇到三个实际问题:
- 视图渲染性能被拖累:Webman 默认不带 Blade 编译缓存,
view()渲染含大量嵌套循环的后台列表页时,CPU 占用明显升高; - 权限校验逻辑散落各处:每个控制器方法里写
if (!$user->can('edit-post')),既难维护又易漏; - 静态资源加载混乱:
public/admin/下放 JS/CSS,但没做 ETag 或协商缓存配置,每次刷新都重新下载。
content\_model.php 必须手动定义字段规则
Webman 不提供 Eloquent 的迁移命令,也不自动解析数据库 schema。CMS 的核心是内容模型(如文章、栏目、标签),你需要在 app/model/ContentModel.php 中显式声明字段类型、验证规则和默认值,否则后续 API 返回或表单提交容易出错:
- 用
protected $fillable = ['title', 'slug', 'content', 'status'];控制可批量赋值字段; - 在
save()方法前调用$this->validate(),避免空标题或超长 slug 写入数据库; - 对
content字段启用 HTML 过滤(如htmlspecialchars($content, ENT_QUOTES, 'UTF-8')),防止 XSS 注入后台编辑器输出; - 不要依赖
created_at自动填充——Webman 的 Model 不自动处理时间戳,得手动赋值$this->created_at = date('Y-m-d H:i:s');。
admin 路由必须用 group + middleware 隔离
Webman 的 config/route.php 支持分组路由,但很多人误以为加个前缀就行:
Route::group('/admin', function () {
Route::get('/posts', [Admin\ContentController::class, 'index']);
});
这只能解决 URL 路径问题,无法拦截未登录访问。正确做法是绑定中间件,并确保中间件返回 response()->redirect('/login') 而非抛异常:
立即学习“PHP免费学习笔记(深入)”;
- 在
app/middleware/AdminAuthMiddleware.php中检查 session 是否存在有效admin_id; - 在
config/middleware.php中注册该中间件为全局中间件或局部绑定; - 注意中间件执行顺序:认证中间件必须在日志中间件之前,否则未登录用户的请求也会被记入操作日志;
- 别在中间件里用
exit或die终止流程——Webman 的中间件链依赖$next($request)正常传递。
public/static.php 开启静态资源强缓存很关键
CMS 后台通常包含大量 JS/CSS 文件(如 TinyMCE、Vue 组件、图表库),Webman 默认不启用静态文件缓存。若不配置,浏览器每次访问都发 If-Modified-Since 请求,服务器需反复读取磁盘判断是否变更,白白消耗 I/O:
- 在
config/static.php中设'enable' => true并指定'expire' => 31536000(1年); - 只对
.js、.css、.woff2等资源启用,避开.html和.php; - 配合构建工具(如 Vite)在文件名中加入哈希(
admin.abc123.js),才能真正实现长期缓存; - 注意:修改
static.php后需重启服务(php start.php restart),热重载不生效。



















