request->getAttribute('response_format') ?? $this->repairResponseFormatByPath(); // 动态选择策略 $returnClass = match ($format) { 'admin', 'common' => AdminReturn::class, 'api' => ApiReturn::class, default => null, }; if (!$returnClass) return $response; /** * @var AdminReturn|ApiReturn $returnObj */ $returnObj = $this->container->get($returnClass); $result = $returnObj->error($e->getMessage(), $e->getCode()); $this->stopPropagation(); return $response->withHeader("Content-Type", "application/json") ->withStatus(200) ->withBody(new SwooleStream(json_encode($result, JSON_UNESCAPED_UNICODE))); } /** * @return string */ private function repairResponseFormatByPath(): string { // 兜底逻辑:根据路径前缀推断 return match (explode('/', $this->request->path())[0] ?? '') { 'admin', 'common' => 'admin', 'api' => 'api', default => 'default', }; } }