Slim需显式用get/post/put/delete绑定路由,路径参数用{id}声明;JSON需getBody转字符串再json_decode或注册BodyParsingMiddleware;错误响应要设404/500状态码及JSON头;OPTIONS预检路由必须显式配置并返回正确CORS头。

怎么用 get、post、put、delete 绑定路由
Slim 默认不区分 HTTP 方法的语义,但 RESTful 要求不同动作对应不同方法。你得显式写出方法名,不能只写 map 或笼统地“加路由”。
常见错误是把所有请求都写成 get,结果 POST /users 创建用户失败,或者前端发了 PUT 但后端没监听,直接 404。
- 每个动作用独立的方法调用:
$app->get('/users', ...)、$app->post('/users', ...)、$app->put('/users/{id}', ...) - 路径参数必须用花括号包裹,比如
{id},Slim 不会自动解析/users/123中的123,除非你声明了{id} - 别在
get回调里处理表单提交逻辑——浏览器地址栏敲回车就是 GET,和 REST 的语义冲突
怎么从请求里安全取 JSON 数据(getBody 和 getParsedBody 的区别)
前端发 Content-Type: application/json,但 Slim 默认不自动解析 JSON。直接读 $request->getBody() 拿到的是原始字符串,不是 PHP 数组;而 $request->getParsedBody() 在没注册解析器时返回 null,容易误判为空。
典型现象:打印 $request->getParsedBody() 是 null,但明明 POST 了 JSON;或者用 json_decode((string)$request->getBody()) 却忘了检查 json_last_error()。
- 手动解析 JSON 时,务必转换流为字符串:
$raw = (string)$request->getBody(),再json_decode($raw, true) - 推荐提前注册解析器:在初始化后加
$app->addBodyParsingMiddleware()(Slim 4+),之后getParsedBody()才对 JSON 有效 - 注意兼容性:Slim 3 没内置 JSON 解析中间件,得自己写或用第三方包;Slim 4 默认开启,但若禁用了中间件链,依然失效
notFoundHandler 和 errorHandler 怎么返回 JSON 格式错误
默认 404 或 500 响应是 HTML 页面,和 REST API 的 JSON 风格冲突。前端收到 HTML 会解析失败,尤其是用 fetch 时 response.json() 报错。
常见做法是全局替换 handler,但容易漏掉状态码设置,导致返回 200 + JSON 错误体,前端难判断成功与否。
- 重写
notFoundHandler时,先设响应头:$response = $response->withStatus(404)->withHeader('Content-Type', 'application/json') - body 写 JSON 字符串,不是数组:
$response->getBody()->write(json_encode(['error' => 'Not Found'])) - 别复用同一个
errorHandler处理开发和生产环境——开发时可以带error->getMessage(),生产必须屏蔽敏感信息
怎么让 Slim 正确响应 CORS(特别是预检 OPTIONS 请求)
前端发 PUT/DELETE 或带自定义 header 时,浏览器先发 OPTIONS 预检。Slim 默认没配 OPTIONS 路由,直接 405 Method Not Allowed,API 就卡死。
有人加中间件统一设 header,但忘了响应预检请求本身;也有人只配了 Access-Control-Allow-Origin,却漏了 Access-Control-Allow-Headers,导致带 Authorization 的请求失败。
- 必须显式处理
OPTIONS路由:$app->options('/api/{routes:.+}', ...),并在回调里返回空响应 + 正确 header - CORS header 要成对出现:有
Access-Control-Allow-Origin,通常就得有Access-Control-Allow-Methods和Access-Control-Allow-Headers - 如果用 Nginx/Apache 做反向代理,优先在 Web 服务器层配 CORS,避免 PHP 层重复处理影响性能
路径参数匹配、JSON 解析时机、错误响应格式、预检请求兜底——这四点没对齐,RESTful 就只是 URL 看起来像而已。
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!










