You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Codeigniter 4 无法捕获错误并返回至HTTP响应问题咨询

CodeIgniter 4.1.4 API错误信息返回配置方法

1. 环境变量配置

  • 先将项目根目录下的env文件重命名为.env(如果已有该文件可跳过)
  • 打开.env文件,修改两个配置项:
    CI_ENVIRONMENT = development
    app.displayErrorDetails = 1
    
    生产环境默认的production模式会隐藏所有错误详情,仅写入日志,改为development模式才会开放错误输出。

2. 异常配置修改

打开app/Config/Exceptions.php文件,调整以下参数:

  • 若需要所有异常都返回详情,可设置$ignorePublic = true,该参数会跳过系统默认的仅公开指定HTTP异常的限制
  • 若仅需要开放部分异常的详情输出,可将对应异常类名添加到$public数组中
  • 保持$log参数为true即可同时保留日志写入能力,不会和响应输出冲突

3. 接口场景统一JSON格式返回(可选)

如果你的API需要统一返回JSON格式的错误信息,可自定义异常渲染器:

  1. 新建app/Libraries/MyExceptionRenderer.php文件,内容如下:
<?php
namespace App\Libraries;

use CodeIgniter\Debug\ExceptionRenderer as BaseExceptionRenderer;

class MyExceptionRenderer extends BaseExceptionRenderer
{
    public function render()
    {
        $response = service('response');
        
        // 开发环境返回详细错误
        if (ENVIRONMENT === 'development') {
            $errorData = [
                'code'    => $this->exception->getCode() ?: 500,
                'message' => $this->exception->getMessage(),
                'file'    => $this->exception->getFile(),
                'line'    => $this->exception->getLine(),
                'trace'   => $this->exception->getTraceAsString()
            ];
        } else {
            // 生产环境返回通用错误提示
            $errorData = [
                'code'    => 500,
                'message' => '服务器内部错误'
            ];
        }
        
        return $response->setJSON($errorData)->setStatusCode($this->getStatusCode());
    }
}
  1. 回到app/Config/Exceptions.php,修改$exceptionRenderer配置:
public $exceptionRenderer = \App\Libraries\MyExceptionRenderer::class;

注意:错误详情输出仅可在开发/测试环境开启,生产环境开启会泄露代码路径、业务逻辑等敏感信息,存在安全风险。

内容的提问来源于stack exchange,提问作者MonkeyTiger

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 07:36:05