Files
orico-official-website/app/admin/middleware/v1/OperateLog.php

54 lines
1.7 KiB
PHP

<?php
declare (strict_types = 1);
namespace app\admin\middleware\v1;
use app\admin\model\v1\SysOperateLog;
class OperateLog
{
/**
* 处理请求
*
* @param \think\Request $request
* @param \Closure $next
* @return Response
*/
public function handle($request, \Closure $next)
{
$response = $next($request);
$log = [
'user_id' => $request->uid,
'title' => '操作日志',
'version' => $request->layer(),
'method' => $request->method(),
'controller' => $request->controller(base: true),
'action' => $request->action(),
'url' => $request->url(),
'ip' => $request->ip(),
'params' => json_encode($request->param()),
'status' => $response->getCode()
];
if (empty($request->exception_info)) {
// 记录正常返回信息
$contentDisposition = $response->getHeader('Content-Disposition');
if (!empty($contentDisposition) && \think\helper\Str::startsWith($contentDisposition, 'attachment')) {
$log['message'] = $contentDisposition;
} else {
$log['message'] = $response->getData();
if (is_array($log['message'])) {
$log['message'] = json_encode($log['message'], JSON_UNESCAPED_UNICODE);
}
}
} else {
// 记录异常返回信息
$log['message'] = (string)$request->exception_info;
}
SysOperateLog::create($log);
return $response;
}
}