/** * Execute the DisplayCommand. * * @param DisplayCommand $command The command to execute. * * @return void */ public function handle(BasicDisplayCommand $command) { $repository = $this->getCommandBus()->handle(new RepositoryQuery($command->entityName)); $entity = $repository->findById($command->id); if (!$entity instanceof EntityInterface) { return; } $compound = new Compound($command->entityName, $this->getElements($entity)); $compound->accept($command->renderer); }
private function registerContentTypes() { $container = $this->container; $output = $this->output; $this->output->registerContentType('TemplateSelector', function (TemplateSelector $selector) use($container, $output) { /** @var RepositoryInterface $repo */ $repo = $container->get('Repository')->forEntity(Template::class); $templates = $repo->getAll(); // @todo Grouping $groups = ['Available Templates' => $templates]; $accordion = new Accordion('Accordion Title', null, new \stdClass()); foreach ($groups as $title => $group) { $compound = new Compound('div', $title, null, new \stdClass()); foreach ($group as $item) { $imageData = new ImageEntity(); $imageData->url = '/' . $item->path . '/preview.png'; $image = new Image($imageData, $item->path); $compound->add($image); } $accordion->add($compound); } $accordion->accept($output); }); }
/** * Render a compound (block) element * * @param Compound $compound The compound * * @return integer Number of bytes written to the output */ public function visitCompound(Compound $compound) { $id = " id=\"{$compound->getId()}\""; $class = $compound->getParameter('class', ''); if (!empty($class)) { $class = " class=\"{$class}\""; } $len = 0; $len += $this->write("<!-- Compound -->\n"); $len += $this->write("<{$compound->getType()}{$id}{$class}>\n"); foreach ($compound->elements as $item) { $len += $item->accept($this); } $len += $this->write("</{$compound->getType()}>\n"); $len += $this->write("<!-- /Compound -->\n"); return $len; }