parsedBody->toArray(); // Workaround: If parsedBody is empty, try parsing JSON directly if (empty($data)) { $rawBody = file_get_contents('php://input'); $data = json_decode($rawBody, true) ?? []; } if (! isset($data['type']) || ! isset($data['title'])) { return new JsonResult([ 'error' => 'Missing required fields: type and title', ], Status::BAD_REQUEST); } $type = LinkType::from($data['type'] ?? ''); $title = LinkTitle::fromString($data['title'] ?? ''); $smartLink = $this->smartLinkService->createLink( type: $type, title: $title, userId: $data['user_id'] ?? null, coverImageUrl: $data['cover_image_url'] ?? null ); return new JsonResult([ 'id' => $smartLink->id->toString(), 'short_code' => $smartLink->shortCode->toString(), 'type' => $smartLink->type->value, 'title' => $smartLink->title->toString(), 'status' => $smartLink->status->value, 'created_at' => $smartLink->createdAt->format('Y-m-d H:i:s'), ], Status::CREATED); } }