Codeigniter 4 ResourceController 实现JSON输出最小化(压缩)的方法
Codeigniter 响应JSON压缩处理方案
方法1:修改全局配置(通用生效,推荐)
Codeigniter RESTful控制器的JSON输出格式由配置文件统一管控,直接编辑app/Config/Format.php,调整JSON格式化参数即可:
// 找到$formatterOptions配置项,移除JSON_PRETTY_PRINT参数 public $formatterOptions = [ 'application/json' => JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES, // 去掉JSON_PRETTY_PRINT后,所有JSON输出默认就是无空格换行的压缩格式 ];
修改后原有$this->respond($data, 200)的代码无需任何改动,输出的JSON自动变为压缩状态。
方法2:单接口手动处理
如果仅需要部分接口返回压缩JSON,不想修改全局配置,可手动编码JSON后输出:
$data = ['id' => 8, 'name' => 'John Doe', 'age' => 27]; // 手动编码时不传入美化参数,直接生成压缩JSON $compressedJson = json_encode($data, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES); return $this->response ->setContentType('application/json') ->setBody($compressedJson) ->setStatusCode(200);
方法3:自定义响应方法(灵活切换格式)
如果需要根据场景切换美化/压缩格式,可在基础控制器中重写respond方法,新增压缩开关:
// 在BaseController中新增自定义响应方法 protected function respond($data, int $statusCode = 200, bool $compress = true) { $jsonOptions = JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES; if (!$compress) { $jsonOptions |= JSON_PRETTY_PRINT; } return $this->response ->setContentType('application/json') ->setBody(json_encode($data, $jsonOptions)) ->setStatusCode($statusCode); }
使用时按需传参即可:
// 输出压缩JSON return $this->respond($data, 200); // 输出美化格式JSON return $this->respond($data, 200, false);
内容的提问来源于stack exchange,提问作者Dusan
相关产品推荐
相关产品推荐

