Webman不能平滑迁移旧项目,必须有策略重写:路由须定义在config/route.php中,控制器需继承Webman\Http\Controller,中间件须全局注册或链式调用,Request对象不支持自动注入和别名方法,常驻内存特性要求手动管理资源释放。

不能“平滑迁移”,只能“有策略重写”——Webman 不是兼容层,没有自动加载旧路由、中间件或服务容器的能力。想直接复制粘贴就跑起来,会卡在 404、Class not found 或内存泄漏上。
Webman 的入口和路由机制不识别 TP/Laravel 风格
常见错误现象:routes/web.php 或 route/app.php 复制进 Webman 后访问路径始终返回 404,日志里无匹配记录。
- Webman 启动靠
start.php,路由必须定义在config/route.php中 -
Route::get('/user/{id}', [UserCtrl::class, 'show'])这类 Laravel 写法无效;Webman 只接受'app\controller\User@index'字符串或闭包 - TP6 的
Route::get('user/:id', 'index/user/show')也不被解析,需改写为Route::get('/user/{id}', 'app\controller\User@show') - 控制器类必须继承
Webman\Http\Controller,不是think\Controller或Illuminate\Routing\Controller
数据库和模型能复用,但初始化逻辑要手动搬
Laravel 的 AppServiceProvider::boot()、TP 的 Db::connect('other') 不会自动触发,必须显式调用。
- Eloquent 和 ThinkORM 模型本身可照常
new和查询,前提是已通过composer require安装对应包 - TP 项目需在
config/bootstrap.php中补上:Db::connect(config('database.connections.mysql')); - Laravel 项目需手动初始化 Eloquent:实例化
Illuminate\Database\Capsule\Manager并调用setAsGlobal()和bootEloquent() - 避免在路由闭包里
new User()多次——Webman 常驻内存,不释放对象会导致内存缓慢增长
中间件、请求和响应对象行为差异明显
TP/Laravel 的中间件注册方式、$this->request 访问习惯、自动注入等,在 Webman 中默认不可用。
立即学习“PHP免费学习笔记(深入)”;
- TP 的
$this->middleware('auth')在构造函数中无效;Webman 中间件必须全局注册(config/middleware.php)或路由链式调用(->middleware(Auth::class)) - Webman 的
Request对象不支持 TP 的input()、param()或 Laravel 的$request->all()别名,要用$request->get()、$request->post()显式取值 - 控制器方法参数不支持自动类型注入(如
function index(UserRepository $repo)),第一个参数固定为Request,其余才是路由变量 - TP 的
$this->error()、Laravel 的abort(403)需重写为return response()->json([...], 403)
别指望全自动工具,但可分模块逐步替换
目前所有所谓“迁移工具”都只处理表层代码格式转换(比如把 public function index() 改成 public function index(Request $request)),真正卡点在业务逻辑与框架生命周期耦合处。
- 先从单个控制器 + 对应路由 + 简单模型开始,验证 DB 查询、JSON 返回、中间件执行是否正常
- TP 的
__construct()初始化逻辑,得拆出来放到config/bootstrap.php或控制器__invoke()中 - Session、Cache、Validate 等组件若依赖框架自动绑定,就得自己封装一层适配器,或换用 Webman 原生插件(如
webman/session) - 异步任务(消息队列、定时器)不要强塞进原有 TP/Laravel 项目,建议单独起一个 Webman 子服务对接,解耦更干净
最易被忽略的点:Webman 是常驻进程,所有全局变量、静态属性、未关闭的数据库连接、未释放的文件句柄,都会累积——TP/Laravel 每次请求都是全新进程,这点惯性思维不打破,上线后内存只会越跑越高。



















