provideCollection($operation, $uriVariables, $context); case $operation instanceof Patch: case $operation instanceof Put: return $this->provideInput($operation, $uriVariables, $context); case $operation instanceof Get: return $this->provideItem($operation, $uriVariables, $context); } } private function provideCollection(Operation $operation, array $uriVariables = [], array $context = []): object { $paginator = $this->collectionProvider->provide($operation, $uriVariables, $context); $items = new \ArrayObject(); foreach ($paginator->getIterator() as $item){ $items[] = new MenuOutput($item); } return new TraversablePaginator($items, $paginator->getCurrentPage(), $paginator->getItemsPerPage(), $paginator->getTotalItems()); } public function provideItem(Operation $operation, array $uriVariables = [], array $context = []): object|array|null { $item = $this->itemProvider->provide($operation, $uriVariables, $context); if (!$item) { throw new NotFoundHttpException('Menu not found'); } return new MenuOutput($item); } public function provideInput(Operation $operation, array $uriVariables = [], array $context = []): object|array|null { if (isset($uriVariables['uuid'])) { $item = $this->itemProvider->provide($operation, $uriVariables, $context); return $item !== null ? new MenuInput($item) : null; } return new MenuInput(); } }