renderer = $renderer; $this->repository = $repository; } public function hasWidget(string $widget): bool { return $this->repository->has($widget); } public function getWidget(string $widget): WidgetInterface { return $this->repository->get($widget); } public function addRenderer(WidgetRendererInterface $renderer): WidgetService { $this->renderer[] = $renderer; return $this; } /** * @param WidgetInterface $widget * @return WidgetRendererInterface * @throws WidgetException */ public function findRenderer(WidgetInterface $widget): WidgetRendererInterface { foreach ($this->renderer as $renderer) { if ($renderer->supports($widget)) { return $renderer; } } throw new WidgetException(sprintf('No renderer available for widget "%s"', \get_class($widget))); } /** * @return WidgetRendererInterface[] */ public function getRenderer(): iterable { return $this->renderer; } }