webman默认支持多应用,无需开关或扩展,只要在app/下创建admin、api等子目录,url路径前缀(如/admin)即自动映射到对应目录的控制器,前提是目录名与路径严格一致、命名空间正确且文件符合psr-4规范。

Webman 本身没有“开启多应用模式”这个开关,它默认就支持多应用结构——只要你在 app/ 下建了多个子目录(比如 admin、api),框架就会按路径前缀自动识别并路由到对应应用。不需要改配置、不需安装扩展、也不用定义常量。
Webman 多应用靠目录结构和命名空间自动生效
Webman 的多应用不是靠配置项启用的,而是由请求 URL 路径与 app/ 下子目录名的匹配关系决定的。例如:
- 访问
/admin/index→ 自动找app/admin/controller/IndexController - 访问
/api/user→ 自动找app/api/controller/UserController - 访问
/shop/order→ 自动找app/shop/controller/OrderController
前提是:
-
app/admin/controller/IndexController.php文件存在,且命名空间为appdmincontroller - 类名符合 PSR-4 规范(如
IndexController),文件名与类名严格一致 - 没有在全局路由里用
Route::get('/', ...)拦截所有根路径请求,否则会覆盖子应用入口
路由前缀必须和 app 子目录名完全一致
URL 中的路径前缀(第一个段)必须与 app/ 下的子目录名大小写、拼写完全相同,否则 404。常见错误:
- 目录叫
app/Admin,但 URL 访问/admin/xxx→ 找不到(Linux 环境区分大小写) - 目录叫
app/api_v1,但 URL 访问/api/xxx→ 不匹配,得改成/api_v1/xxx - 想让
/默认进app/portal,但没配domain_bind或入口重写 → 实际走的是app/controller(即传统单应用 fallback)
如果真要让根路径指向某个应用,推荐方式是:
- 删掉
app/controller目录(避免 fallback 干扰) - 在
config/route.php里加一条全局路由:Route::get('/', [appportalcontrollerIndexController::class, 'index']);
中间件和异常处理可按应用单独配置
不同应用往往需要不同的中间件链或异常响应格式。Webman 支持按应用名精细化控制:
- 在
config/middleware.php中,用数组键名指定应用:'api' => [supportmiddlewareCors::class],这样只有/api/请求才执行跨域中间件 - 在
config/exception.php中,可为'api'配supportexceptionApiHandler::class,返回 JSON;为'admin'配页面渲染类 - 注意顺序:全局中间件 → 应用中间件 → 控制器中间件,同名中间件不会去重
别把中间件直接写在子应用的 route.php 里——那只是路由级中间件,作用范围窄,且容易漏配。
新增应用后必须检查命名空间和自动加载
新建 app/mobile 后,控制器类若报 Class not found,90% 是命名空间写错或 Composer autoload 没更新:
- 确认
app/mobile/controller/TestController.php顶部有:namespace appmobilecontroller; - 确认
composer.json的autoload段包含 PSR-4 映射:"app\": "app/"(默认已有,但手动改过可能被覆盖) - 运行
composer dump-autoload强制刷新自动加载映射 - 别用 IDE 自动生成命名空间——有些会生成
AppMobileController(首字母大写),而 Webman 默认小写路径,导致不匹配
最稳妥的方式:用命令行创建应用(php console/webman app:create mobile),它会自动处理命名空间和目录结构。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











