架构与请求 · 第 10 题,共 12 题

一个中间件调用了 $request->withAttribute('myext.region', $region),然后 return $handler->handle($request)。控制器中缺少该属性。错误在哪里?

有 1 个正确答案。 中等

显示答案

答案

  • C withAttribute() 返回一个新的请求;没有 $request = $request->withAttribute(...),传递下去的是未修改的请求

解析

PSR-7 请求是不可变的:每个 with*() 方法都返回一个修改后的副本,原对象保持不变。如果不接收返回值,传给下一个处理器的就是旧请求,属性随之丢失。正确的代码是 $request = $request->withAttribute('myext.region', $region);,之后所有后续中间件和控制器都能看到该属性。属性无需注册,名称中带点号也很常见,Core 就使用了例如 frontend.user。

认证与考试

下一个考试是什么?

已有 19 项考试可以练习,21 项正在投票中。查看所有认证及官方信息,投出你的一票,或推荐你的考试。

查看全部认证