method(), ['POST', 'PUT', 'PATCH', 'DELETE'])) { return $response; } // 排除白名单 foreach ($this->except as $pattern) { if ($request->is($pattern)) { return $response; } } $user = $request->user(); if (!$user) { return $response; } try { // 从 URL 推断模块和操作 $path = $request->path(); $module = $this->parseModule($path); $action = $this->parseAction($request->method()); OperationLogModel::create([ 'store_id' => $user->store_id, 'user_id' => $user->id, 'user_name' => $user->name, 'module' => $module, 'action' => $action, 'target' => $path, 'ip' => $request->ip(), 'method' => $request->method(), 'url' => $request->fullUrl(), 'created_at' => now(), ]); } catch (\Throwable $e) { // 日志记录失败不影响业务 \Log::warning('操作日志记录失败: ' . $e->getMessage()); } return $response; } private function parseModule(string $path): string { // api/v1/system/users → system $segments = explode('/', $path); return $segments[2] ?? 'unknown'; } private function parseAction(string $method): string { return match ($method) { 'POST' => 'create', 'PUT', 'PATCH' => 'update', 'DELETE' => 'delete', default => $method, }; } }