1. TP5公共方法开发背景与需求分析
在ThinkPHP5框架的实际开发中,我们经常遇到一些需要重复使用的功能场景。比如记录调试日志、处理异常情况、生成图片URL以及计算地理位置距离等。这些功能如果每次都重新编写,不仅效率低下,而且难以保证代码一致性。
我最近在一个电商项目中就遇到了这样的需求:需要记录用户行为日志、处理支付异常、动态生成商品图片URL,以及根据用户位置计算与商家的距离。通过将这些功能封装成公共方法,不仅提高了开发效率,还使得代码维护更加方便。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 日志记录功能实现
2.1 日志记录方法设计
在TP5中,虽然框架自带了日志功能,但默认配置可能不符合我们的业务需求。我们需要一个更灵活的日志记录方法:
php复制/**
* 自定义日志记录
* @param string|array $content 日志内容
* @param string $level 日志级别
* @param string $file 日志文件名(不含后缀)
* @return bool
*/
public static function writeLog($content, $level = 'info', $file = '')
{
try {
if (empty($file)) {
$file = $level;
}
$logPath = \think\facade\Env::get('runtime_path') . 'log/' . date('Ym') . '/';
if (!is_dir($logPath)) {
mkdir($logPath, 0755, true);
}
$content = is_array($content) ? json_encode($content, JSON_UNESCAPED_UNICODE) : $content;
$logContent = '[' . date('Y-m-d H:i:s') . '] ' . strtoupper($level) . ': ' . $content . PHP_EOL;
return file_put_contents($logPath . $file . '.log', $logContent, FILE_APPEND);
} catch (\Exception $e) {
// 日志记录失败时静默处理
return false;
}
}
2.2 日志方法使用示例
php复制// 记录普通信息日志
self::writeLog('用户登录成功', 'info', 'user');
// 记录错误日志(数组会自动转为JSON)
self::writeLog([
'error' => '支付失败',
'order_no' => '2023080112345
