ThinkPHP项目调试模式与变量输出

wen PHP项目 3

本文目录导读:

ThinkPHP项目调试模式与变量输出

  1. 调试模式
  2. 变量输出方法
  3. 使用日志调试
  4. 使用 Trace 调试
  5. 变量输出到页面
  6. 调试技巧
  7. 生产环境配置建议

在 ThinkPHP 项目中,调试模式和变量输出是开发过程中非常重要的功能,下面详细讲解这两部分内容。


调试模式

开启调试模式

在 ThinkPHP 中,调试模式通过 APP_DEBUG 常量控制,在入口文件(如 public/index.php)中设置:

// 开启调试模式
define('APP_DEBUG', true);
// 关闭调试模式(生产环境)
// define('APP_DEBUG', false);

注意事项:

  • 生产环境必须关闭调试模式,否则会暴露敏感信息,影响性能
  • 调试模式开启后会显示详细的错误信息、SQL 日志、页面 Trace 信息等

调试模式的影响

开启调试模式后:

功能 开启调试模式 关闭调试模式
错误信息 显示详细错误 显示友好错误页
SQL 日志 记录并显示 不记录
页面 Trace 显示 不显示
缓存 不使用 使用
模板编译缓存 每次编译 编译缓存

变量输出方法

dump() 函数

这是最常用的调试输出函数,功能类似 PHP 的 var_dump(),但输出格式化更美观:

// 在控制器中
public function test() {
    $data = ['name' => 'Tom', 'age' => 20];
    $user = new User();
    // 输出数组
    dump($data);
    // 输出对象
    dump($user);
    // 输出多个变量
    dump($data, $user);
    // 停止执行
    dump($data);die; // 或使用 halt()
}

halt() 函数

halt()dump()die() 的组合,输出后终止程序执行:

public function test() {
    $data = ['name' => 'Tom'];
    halt($data); // 输出后停止执行
    echo '这段代码不会执行';
}

var_dump()print_r()

PHP 原生函数,在 ThinkPHP 中也可以使用:

public function test() {
    $data = ['name' => 'Tom'];
    var_dump($data); // 显示数据类型和值
    print_r($data);  // 只显示值,格式更简洁
}

使用日志调试

记录日志

ThinkPHP 提供了日志功能,用于记录调试信息:

use think\facade\Log;
public function test() {
    $data = ['name' => 'Tom'];
    // 记录不同级别的日志
    Log::info('这是一个信息日志');
    Log::error('这是一个错误日志');
    Log::debug('调试信息:' . json_encode($data));
    Log::warning('警告信息');
    // 记录到特定通道
    Log::channel('debug')->info('自定义通道日志');
}

查看日志

日志默认保存在 runtime/log/ 目录下,按日期分文件:

runtime/log/
├── 202401/          # 月份目录
│   ├── 01.log       # 日期文件
│   ├── 02.log
│   └── ...
└── ...

使用 Trace 调试

开启 Trace

config/app.php 中配置:

// 应用调试模式
'app_trace' => true,  // 开启页面Trace

Trace 面板内容

开启后页面底部会显示 Trace 面板,包含:

  • 运行时间
  • 加载文件数
  • 数据库查询次数
  • SQL 语句
  • 缓存使用情况
  • 会话信息
  • 包含的 PHP 文件列表

变量输出到页面

模板变量输出

在控制器中分配变量到模板,然后在模板中输出:

// 控制器
public function test() {
    $name = 'Tom';
    $data = ['name' => 'Tom', 'age' => 20];
    return view('index/test', [
        'name' => $name,
        'data' => $data
    ]);
}
<!-- 模板文件 views/index/test.html -->
<!DOCTYPE html>
<html>
<head>变量输出测试</title>
</head>
<body>
    <p>姓名:{$name}</p>
    <p>年龄:{$data.age}</p>
    <!-- 调试输出(可配合条件判断) -->
    {if condition="app.env('APP_DEBUG')"}
        <pre>{:dump($data)}</pre>
    {/if}
</body>
</html>

JSON 输出(接口调试)

public function test() {
    $data = ['name' => 'Tom', 'age' => 20];
    // 输出 JSON(模拟接口返回)
    return json($data);
    // 或使用 response()
    return response($data, 200, ['Content-Type' => 'application/json']);
}

调试技巧

使用 T()

ThinkPHP 提供了 T() 函数,可以输出调试信息到浏览器控制台:

public function test() {
    T('开始调试');
    // 执行一些操作
    T('结束调试');
}

调试模式下的异常处理

use think\exception\ValidateException;
public function test() {
    try {
        // 业务逻辑
        validate([...])->check($data);
    } catch (ValidateException $e) {
        // 在调试模式下输出详细信息
        if (app()->isDebug()) {
            dump($e->getMessage());
            dump($e->getTrace());
        }
        return json(['error' => '验证失败']);
    }
}

自定义调试方法

// 在公共控制器或基类中定义
protected function debugVars($var, $label = '') {
    if (app()->isDebug()) {
        echo ($label ? "=== $label ===<br>" : '');
        dump($var);
        echo "<hr>";
    }
}
// 使用
public function test() {
    $user = User::find(1);
    $this->debugVars($user, '用户信息');
    $list = User::all();
    $this->debugVars($list, '用户列表');
}

生产环境配置建议

// config/app.php
return [
    // 关闭调试模式
    'app_debug' => false,
    // 调整错误提示
    'error_message' => '页面错误!请稍后再试~',
    // 关闭 Trace
    'app_trace' => false,
    // 日志记录级别
    'log' => [
        'level' => ['error', 'critical'], // 只记录错误级别
    ],
];

调试方法 使用场景 特点
dump() 快速查看变量 格式化输出,可查看类型
halt() 输出并终止 常用于排查问题
Log 记录调试信息 可持久化,适合复杂调试
Trace 面板 查看运行详情 包含 SQL、性能等信息
模板输出 视图调试 结合模板引擎使用
JSON 输出 接口调试 模拟 API 返回

最佳实践:

  1. 开发环境开启调试模式,使用 dump()halt() 快速调试
  2. 复杂问题使用日志记录,方便后期分析
  3. 生产环境务必关闭调试模式,使用错误日志记录
  4. 调试完成后及时清理调试代码,避免影响性能

抱歉,评论功能暂时关闭!