Webman不是Laravel或ThinkPHP的兼容层,迁移需重写入口、适配路由约定、手动桥接逻辑,无全自动工具;其启动依赖start.php,路由定义于config/route.php,不识别Laravel/TP风格路由语法。

Webman 不是 Laravel 或 ThinkPHP 的“兼容层”,它不加载 bootstrap/app.php,也不解析 route/web.php 风格的路由定义。想把老项目代码“搬进去就跑”,必须接受一个前提:**迁移 = 重写入口 + 适配约定 + 手动桥接核心逻辑**。没有全自动工具能绕过这个事实。
Webman 的入口和路由机制与 Laravel/TP 完全不兼容
Webman 启动靠 start.php,路由注册在 config/route.php,且只认闭包或控制器类+方法字符串(如 'app\controller\Index@index'),不识别 Laravel 的 Route::get('user/{id}', [UserController::class, 'show']) 或 TP6 的 Route::get('user/:id', 'index/user/show')。
常见错误现象:把 Laravel 的 routes/web.php 直接复制进 Webman,然后访问 /users —— 返回 404,日志里没有任何路由匹配记录。
实操建议:
- 删掉所有旧路由文件,从
config/route.php重新写起;用Route::get()、Route::post()显式绑定每个路径到具体类方法 - 控制器类需继承
Webman\Http\Controller(非think\Controller或Illuminate\Routing\Controller) - 如果原项目大量使用中间件别名(如
'auth'),Webman 中必须改写为完整类名,例如\app\middleware\Auth::class - TP5 的
__construct()中调用$this->middleware()无效,Webman 的中间件必须在config/middleware.php全局注册,或在路由定义时用->middleware()
Laravel 的 Eloquent 和 TP 的 Db/Model 在 Webman 里照常可用
Webman 是 PSR-7/PSR-15 兼容的框架,本身不提供 ORM,所以 Illuminate\Database\Eloquent\Model 和 think\Model 只要 Composer 装了,就能直接 new 和查询。
立即学习“PHP免费学习笔记(深入)”;
但注意:Laravel 的服务容器绑定(如 $app->bind(UserRepository::class, ...))不会自动生效;TP 的 Db::name('user') 也没问题,但 Db::connect('other') 需确认连接配置已写入 config/database.php 并被 Webman 加载。
实操建议:
- 在
config/bootstrap.php中手动初始化数据库连接,例如:Db::connect(config('database.connections.mysql'));(TP)或new \Illuminate\Database\Capsule\Manager(Laravel) - Eloquent 模型若依赖
AppServiceProvider中的 boot() 逻辑,得把对应代码挪到config/bootstrap.php或控制器构造函数中 - 避免在路由闭包里直接 new 大量模型——Webman 默认无请求生命周期管理,对象不会自动释放,容易内存泄漏
视图渲染和静态资源路径最容易出错
Webman 默认不带 Blade 或 ThinkTemplate 引擎,view() 函数只是对 support\View 的封装,而该类默认只支持 PHP 原生模板(.php 后缀)。
常见错误现象:Laravel 项目里 return view('welcome', ['name' => 'Tom']); 报错 View [welcome] not found,因为 Webman 根本没加载 Blade 编译器;TP 项目里 fetch('index/index') 报错找不到模板,是因为路径映射规则变了。
实操建议:
- Blade 渲染需额外装
illuminate/view并手动注册引擎,示例:View::addExtension('blade.php', 'blade');,再确保resources/views下有welcome.blade.php - TP 的模板路径默认是
template/,Webman 的view()查找路径是resources/views/,要么改配置view.path,要么把模板移过去 - 静态资源(CSS/JS)必须放在
public/目录下,Webman 不处理public/static/以外的路径;Nginx/Apache 的 root 必须指向public,否则/js/app.js404
环境变量和配置加载不是自动的
Webman 不读取 .env 文件,也不执行 Laravel 的 Dotenv::create() 或 TP 的 Env::load()。所有配置都靠 config/ 下的 PHP 文件返回数组,.env 里的值不会注入进去。
常见错误现象:数据库连不上,config/database.php 里写的 env('DB_HOST', '127.0.0.1') 返回 null;或者缓存驱动始终是 file,因为 env('CACHE_DRIVER') 没生效。
实操建议:
- 删掉
.env文件,把关键变量(DB_HOST、REDIS_HOST 等)硬编码进config/database.php、config/cache.php等文件中 - 如必须保留
.env,需在config/bootstrap.php开头手动加载:if (file_exists(BASE_PATH . '/.env')) { $dotenv = Dotenv\Dotenv::createImmutable(BASE_PATH); $dotenv->load(); },并composer require vlucas/phpdotenv - TP 的
Config::get('database.hostname')在 Webman 里不可用,得改成config('database.connections.mysql.host')(假设你把配置结构对齐了)
new、每一次 config()、每一个 view() 调用,都得亲手确认上下文是否就位。



















