作者:姚杨 | 专栏:阿杰的技术成长
周五深夜,vibe coder 阿杰用「标准全家桶」让 AI 写下单接口,却被框架层层「魔法」绕晕,整晚调试无果。务实 CTO 老陈看不下去,甩来一个「没有魔法」的框架链接。阿杰半信半疑换上,没想到三行代码一次跑通——路由、响应、落库一气呵成,彻底告别手写样板。他正琢磨「正式立项改名会不会很麻烦」,老陈神秘一笑:「一条命令的事。」到底这条命令做了什么,能让模板瞬间变成你自己的项目?
周五晚 11 点,阿杰又卡住了
阿杰是个典型的「vibe coder」——他不直接写代码,他对着 AI 说人话。微信刚弹来产品消息:「周一前给运营做个内部下单工具,能查订单、能建订单就行。」阿杰心想这有何难,打开他最熟的 PHP 全家桶就开干。
那是套「业界标准」配置:服务容器、门面(Facade)、注解路由、依赖注入。AI 帮他生成了一段控制器,看起来人模狗样:
// AI 生成的「标准」控制器
public function store(Request $request)
{
$user = Auth::user(); // Facade 静态代理,背后是容器绑定
$order = Order::create($request->validated()); // 依赖一个 FormRequest 类
$order->save();
return response()->json($order); // 又包了一层响应封装
}
一跑就报错。Auth 门面背后那层静态代理 AI 没搞对,容器里没绑定这个服务;validated() 需要的 FormRequest 类压根没生成。阿杰在三个文件之间来回跳,AI 每改一次就引入一个新的「魔法」漏洞。凌晨两点,他终于承认:问题不在 AI,在于框架给 AI 挖了太多坑。
老陈甩来一个链接:「试试这个,没有魔法」
做 CTO 的老同学老陈,一句话点醒他:「你先别想什么 Service、Repository。就写个闭包。」
老陈发来的项目叫 php-vibe-coding-frame——一个单层 MVC 的极简 PHP 框架,专为 PHP-FPM 快速开发设计。没有 DI 容器、没有注解、没有 YAML 路由配置、没有 Composer autoload;路由即闭包,控制器即函数,写完即跑。
阿杰半信半疑 clone 下来,按文档跑了一条命令,浏览器里跳出了 hello world。
git clone https://github.com/smarty-kiki/php-vibe-coding-frame.git my-project
cd my-project
sh project/tool/start_development_server.sh # Docker 一键起开发环境
clone 下来,阿杰顺嘴问了一句:「目录还叫 php-vibe-coding-frame,正式立项改名不麻烦?」老陈乐了:「一条命令的事。」他指了指 project/tool/naming_project.sh:
sh project/tool/naming_project.sh my-project
「它会把 nginx、supervisor、Caddy 的配置文件名,连同 README、CLAUDE.md 里所有项目名占位符,一次性替换成 my-project。模板秒变你的项目,连文档都帮你改好——基于这套模板初始化新项目,基本零摩擦。」
三行代码,第一次跑就通了
老陈说:「你那个下单需求,我就写个闭包。」阿杰照着写:
if_post('/order', function () {
$order = order::create(input('user_id'), input('amount'));
return $order; // 返回实体 → 自动 JSON;闭包结束 → 自动落库
});
他盯着屏幕:没有 ->save(),没有 response()->json(),没有注入。 闭包返回实体,框架自动序列化成 JSON;闭包一结束,unit_of_work() 自动把新订单 INSERT 进库。第一次跑,就成了。
阿杰愣了一下——他花了一整晚在「标准框架」里和魔法搏斗,在这个框架里,三行代码解决了。
为什么 AI 在这里不再「幻觉」
老陈在语音里笑:「这框架的核心哲学就一句话——框架退后一步,让意图站到前面。 它对 AI 友好,是因为它对人友好。」
他点了几个设计:
- 没有魔法:没有
__call代理、没有 Facade 静态代理、没有注解解析。Ctrl+Click 能追到源码,grep 能找到所有引用。AI 的静态分析不会被元编程绕晕。 - 意图即结果:闭包返回数组就是 JSON,返回字符串就是 HTML。AI 看一眼就知道输出是什么,不用猜
response()->json()的封装。 - 一个文件就是一个功能:路由、参数校验、业务调用全在一个闭包里。改一个功能,改一个文件。AI 不用在 Controller → Service → Repository 的调用链里迷路。
- 自动持久化:
unit_of_work()自动包裹所有路由闭包。你只管create、赋属性,闭包结束自动写库,不用记save()/flush()的时机。
「过去十年我们攒了一堆『为了人类可维护性』的模式,」老陈说,「接口隔离、依赖反转、DI 容器——前提是项目大到人类必须切块。但 AI 能在单个文件里理解全部逻辑,这些中间层对它来说就是噪音。分层越多,AI 幻觉的注入点越多。 这个框架主动做了减法:这不是阉割,是剪枝。」
阿杰后来拿它干了三件事
- 运营下单工具(就是那个周五的需求)——一个下午交付,周一正常用。
- 小程序后端 API 服务——毫秒级延迟,不用路由/配置缓存预热,PHP-FPM 原生友好。
- 快速验证业务想法——想法到代码的路径最短,写完即跑。
它最适合:中小型项目、快速原型、API 服务、内部工具。它不适合需要完整组件系统、复杂事件总线的超大型应用——那种场景,上 Laravel 更合适。框架不替你做架构决策,它只是把摩擦降到最低。
和「标准框架」的对照
| 维度 | php-vibe-coding-frame | Laravel |
|---|---|---|
| 路由 | 闭包直接写在 controller/*.php |
routes/web.php 指向 Controller 类方法 |
| 控制器 | 闭包即控制器 | Controller 类 + 方法 |
| DI | 无,依赖显式 include |
服务容器自动注入 |
| ORM | 自研 ActiveRecord + 工作单元 | Eloquent |
| 配置 | PHP 数组 + 环境覆盖 | .env + config/*.php |
| 类加载 | class map,O(1) include | Composer PSR-4 |
| 启动开销 | 仅 include ~10 个核心文件 | 数百类 + 数十 ServiceProvider |
| AI 友好度 | 高(无魔法,静态可追溯) | 中(魔法层易致幻觉) |
尾声:早知道,昨晚能多睡四小时
周一早上,阿杰把下单工具交给运营,顺手给老陈发了句:「早知道有这框架,昨晚能多睡四小时。」老陈回:「框架不背锅,选对工具才省时间。去 Star 一下,下次别再跟魔法较劲了。」
如果你也在用 AI 写 PHP,却总被框架的「魔法」绕晕,不妨试试这个把意图放在第一位的框架:
git clone https://github.com/smarty-kiki/php-vibe-coding-frame.git
cd php-vibe-coding-frame
sh project/tool/start_development_server.sh # 打开 http://localhost 看 hello world
项目完全开源,仓库地址:
https://github.com/smarty-kiki/php-vibe-coding-frame
欢迎 Clone、Star,也欢迎来提 Issue 和 PR——一起把「让 AI 一次跑通」这件事,做得更彻底。