💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
### Response的实例化 - 再调用http的run方法,再进过路由的调度,最终再Dispath的run方法中进行Response的实例化。 ``` public function run() { .... $data = $this->exec(); return $this->autoResponse($data); } ``` - exec(); 方法其实是进行实例化控制器,并执行控制器操作方法,最终返回执行结果。再控制器方法中可以直接return 出结果,框架会自动构建出Response对象。 - 将结果 带入autoResponse函数,该函数里面,可以看到Resconse对象的实例化。 ~~~ protected function autoResponse($data): Response { if ($data instanceof Response) { $response = $data; } elseif (!is_null($data)) { // 默认自动识别响应输出类型 $type = $this->request->isJson() ? 'json' : 'html'; $response = Response::create($data, $type); } else { // 获取缓冲数据,并清空缓冲 $data = ob_get_clean(); $content = false === $data ? '' : $data; $status = '' === $content && $this->request->isJson() ? 204 : 200; $response = Response::create($content, 'html', $status); } return $response; } ~~~ - 有以上代码可以看出,再控制器方法中只需要return 出数据即可, 也可以return出Response对象。(若控制器方法return的数据是response实例,则直接返回,若控制器方法return的数据不是response对象,则通过autoResopnse方法,构造出一个response对象) - 由autoResponse函数可以看出,在控制器没有返回明确的response对象时,会通过识别请求的类型构造出相应的response对象。