跳转到主内容
极星编程网:以代码为星,赴技术山海!

PHP怎么处理Flight PHP微框架_Flight简洁路由与响应【操作】

Flight路由需显式指定HTTP方法,@id参数须用正则约束,响应必须调用Flight::json()或手动header()+echo,分组必须在Flight::start()前定义。 Flight 的路由和响应机制本身极轻,但容易因“写法顺序”和“返回值误用”直接导致 404、空白页或 header 冲突——不是框架不行,是它不帮你兜底。 Flight::route() 必须带明确 HTTP 方法前缀 Flight 不默认绑定 GET;不加方法名,路由就只匹配所有方法(包括 OPTIONS、HEAD),但多数 Web 服务器或前端发请求时不会触发你预期的回调。 ✅ 正确写法:
Flight::route('GET /users', function() { ... });
、
Flight::route('POST /users', function() { ... });
❌ 错误写法:
Flight::route('/users', function() { ... });
—— 看似省事,实则匹配逻辑模糊,调试时难定位 ⚠️ 注意:
GET|POST /login
是合法的,但若需区分逻辑,建议拆成两个路由,避免回调里堆 if($_SERVER['REQUEST_METHOD'] === 'POST') 参数路由里的
@id
不自动解析,正则约束得手写 Flight 的
@id
只是占位符替换,不校验类型或格式。比如
/user/@id
会把
/user/abc
也传进去,$id = 'abc',后续出错才暴露问题。 ✅ 安全做法:用正则显式约束,如
Flight::route('GET /user/@id:[0-9]+', function($id) { ... });
✅ 更灵活写法:
Flight::route('GET /user/[0-9]+', function() { $id = (int)basename(Flight::request()->url); ... });
(适合简单场景) ⚠️ 别依赖
Flight::path()
提取参数——它返回的是去除域名后的完整路径,
/v1/user/123
就是原样返回,不帮你切分 响应必须用
Flight::json()
或手动
header()
+
echo
,不能 return Flight 不捕获路由回调的 return 值,写了也丢弃。常见错误是写
return ['data' => 'ok'];
,结果页面空白——因为没输出、没设 header。 立即学习 “ PHP免费学习笔记(深入) ”; ✅ 返回 JSON:
Flight::json(['status' => 'success']);
—— 自动设
Content-Type: application/json
和
200 OK
✅ 自定义状态码:
Flight::response()->status(404); Flight::json(['error' => 'not found']);
✅ 返回纯文本或 HTML:
header('Content-Type: text/plain'); echo 'done';
⚠️ 切忌混用:
Flight::json(...)
后再调
header()
会触发 “headers already sent” 错误 路由分组
Flight::group()
必须在
Flight::start()
前定义 这是最隐蔽的坑:分组不是运行时行为,而是静态注册阶段拼接前缀。一旦
Flight::start()
执行,路由表就冻结了。 ✅ 正确顺序:
Flight::group('/api', function() { Flight::route('GET /users', ...); }); Flight::start();
❌ 无效写法:把
Flight::group(...)
放在
Flight::start()
后面,或包在某个条件判断里 ⚠️ 分组不支持链式调用:
Flight::group('/v1')->group('/users')
会报错;只能嵌套闭包:
Flight::group('/v1', function() { Flight::group('/users', function() { ... }); });
⚠️ 子路由开头的
/
可省可不省:
route('GET /list')
和
route('GET list')
在
group('/api')
下都等价于
/api/list
真正卡住人的地方,往往不是语法写错,而是执行时机错——比如
group()
放错位置、
return
当成有效输出、或者以为
@id
天然带数字校验。这些点不试一次,光看文档很难意识到。

相关文章